首页 > 解决方案 > 在 TypeScript 中,哪个对象 HashSet 被反序列化了?

问题描述

我有一个 ASP.NET Core .NET 5 Angular SPA。

具有导航属性的 EF 代理类:

public partial class Parent
...
public virtual HashSet<Child> Children { get; set; }

如何Children在 TypeScript 中“正确”声明属性?

我尝试了数组 [] 和 Set 但无法正常工作。

interface Child {
  id: number; ...
}

interface Parent {
  id: number; ...
  children: Child[];
}

浏览器中的 JSON(不管是 Set 还是数组 TS 类型)是相同的:

[{
        "$id": "1",
        "id": 1,
        ...
            "parent": {
                "$id": "3",
                "$values": [{"$ref": "1"}]
            }
        },
        "children": {
            "$id": "4",
            "$values": [{
                    "$id": "5",
                    "id": 1,
            ...

在 HTML 我试试这个:

<div *ngFor="let item of parents[0].children | keyvalue">
  {{item.key}}:{{item.value}}
</div>

outputs:

$id:4
$values:[object Object]

但是这个没有输出:

<div *ngFor="let item of parents[0].children[0] | keyvalue">
  {{item.key}}:{{item.value}}
</div>

接下来也没有输出任何内容(这实际上就是我要问的原因 - 如何让children属性工作):

<div *ngFor="let item of parents[0].children">
  {{item.id}}:{{item.name}}
</div>

我的意思是这是非常基本的场景。需要在 UI 中显示具有导航属性的 EF 对象。但是我找不到究竟需要做什么。

我想要一个简单的答案 - childrenTypeScript 中导航属性的正确类型应该是什么?

注意:我有这些 $id, $values 因为我必须处理 EF 类中的循环引用

编辑:一旦我在运行时尝试this.parents[0].children[0]立即窗口,它会说undefined

this.parents[0]
Object {$id: "1", id: 1,…}
    $id: "1"
    id: 1
    ...
    children: Object {$id: "4", $values: Array(1)}

this.parents[0].children
Object {$id: "4", $values: Array(1)}
    $id: "4"
    $values: Array(1) [Object]
    __proto__: Object {constructor: , __defineGetter__: , __defineSetter__: , …}

this.parents[0].children[0]
undefined

EDIT2children_ts: Child[] :一旦我介绍了服务器端的“假”属性,Children_ts = Children.ToArray();一切都开始工作了。所以我认为这是一个错误,前端不能使用 JSON 中的引用(例如$values

标签: c#angulartypescriptasp.net-coreasp.net-core-5.0

解决方案


推荐阅读