$id 令牌是 JSON 标准吗?

2023-11-30

使用 Microsoft WebApi 2(使用第三方 Json.NET 库),假设我返回以下内容people array:

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 规范中的某些内容并未得到广泛支持?


No, $id and $ref不是 JSON 标准的一部分(您会注意到它没有在任何地方提到JSON.org);它是 Json.Net 用于标记对象并引用它们以保留反序列化引用的约定。其他 JSON 库可能遵循也可能不遵循相同的约定。看保留对象引用有关详细信息,请参阅 Json.Net 文档。

注意:有一些 javascript 方法可以处理解析$id/$ref来自 Json.Net 的表示法。您可能对这些示例感兴趣:

  • 解决 JSON 对象的循环引用
  • 如何从 Json.NET 序列化 JSON 恢复循环引用(例如“$id”)?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

$id 令牌是 JSON 标准吗? 的相关文章

随机推荐