c# - 在 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 对象。但是我找不到究竟需要做什么。
我想要一个简单的答案 - children
TypeScript 中导航属性的正确类型应该是什么?
注意:我有这些 $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
)
解决方案
推荐阅读
- java - 查找要在 pom .XML 文件中使用的正确 Junit 版本
- android - 设置自定义ActionBar在左右两侧留出空间
- html - 如何在wiki中展开这两个文件夹
- python - 在 3D 数组中查找最大值的索引并存储为 2D 数组
- javascript - 这是处理 Javascript 不变性的正确方法吗?
- java - 修改后的 Minecraft 错误:没有这种方法?
- python - 如何使用在后台运行的 python 脚本轮询 JSON 文件中的更改并提取更改?
- docker - Spring Boot Redis 使用 Redis 时出现连接被拒绝异常
- c - 从 C 中的 PE 文件部分检索汇编代码
- wordpress - 在 WP 之外的外部 php 文件中传递 WordPress 标题