【发布时间】:2016-01-23 11:48:53
【问题描述】:
使用 Microsoft WebApi 2(使用第三方 Json.NET 库),假设我返回以下 people 数组:
var p1 = new Person("Alice");
var p2 = new Person("Bob");
p1.Sibling = p2;
p2.Sibling = p1;
var people = new[] { p1, p2 };
为了避免循环引用,Json.NET 会输出以下 JSON:
[
{
"$id":"1",
"Name":"Alice",
"Sibling":{
"$id":"2",
"Name":"Bob",
"Sibling":{
"$ref":"1"
}
}
},
{
"$ref":"2"
}
]
Javascript 的 JSON.parse() 方法对这种语法一无所知。我查阅了 JSON 规范,发现在指针中使用了 $ref 关键字,但没有看到它们使用 $id 关键字。 Json.NET 有什么奇怪的地方吗?还是它在 JSON 规范中没有得到广泛支持?
【问题讨论】:
-
json 是 json。就它而言,这些只是键:值。这些键/值代表什么取决于生成数据结构的代码,该数据结构最终被编码为 json。如果键是
"id"、"$id"或"foobar",json 本身并不关心。你所拥有的是完全有效的 json。一个包含两个对象的数组,包含更多的子数据。