我如何阻止.net JSON序列化引用以前的元素
本文关键字:元素 引用 序列化 何阻止 net JSON | 更新日期: 2023-09-27 18:15:21
我使用MVC/Web API从MVC 4.5提供JSON服务。
所有工作都很好,直到需要公开一个具有一定数量重复数据的大型JSON结果。
对于那些不确定我的意思的人,例如,如果我有一个图书列表,其中每本都有完整的作者数据,.net将更改同一作者的第二个版本以引用前一个,而不是重复数据。在这些情况下,它使用$X引用,其中X是要引用的项的索引。
虽然我欣赏它的效率节省,这种格式不能被我们的客户端应用程序使用
Json。NET有一个设置可以做到这一点。它是保存对象引用,这里是文档的链接:
我想说,你所经历的,和文档
中的一个例子很相似。一些摘录(但是,请参阅文档了解更多细节):
让我们有一个集合人和两个人。有一个小技巧:像这样设置PreserveReferencesHandling
string json = JsonConvert.SerializeObject(
people,
Formatting.Indented,
new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects
});
我们可以得到这样的结果:
[
{
"$id": "1",
"Name": "James",
"BirthDate": "1983-03-08T00:00Z",
"LastModified": "2012-03-21T05:40Z"
},
{
"$ref": "1"
}
]
我们所看到的,很可能就是你所经历的。所以PreserveReferencesHandling.Objects
似乎是你代码的设置。因此,尝试显式地将其设置为None,如下所示:
new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.None;
}
和文档中一样:
…默认为Json。. NET将序列化它遇到的所有对象价值。如果一个列表包含两个Person引用,并且两个引用指向同一个对象,那么JsonSerializer就会写出所有的对象每个引用的名称和值…
所以这应该是默认的设置又是
另一个有趣的阅读:序列化循环引用