Ant*_*ain 5 .net c# json asp.net-mvc-4 asp.net-web-api
我使用MVC 4.5的MVC/Web API来提供JSON服务.
一切正常,直到需要公开具有一定量重复数据的大型JSON结果.
对于那些不确定我的意思的人,如果我有一个书籍列表,其中每个都有完整的作者数据,.net将更改同一作者的第二个版本以引用前一个版本,而不是复制数据.在这些情况下,它使用$ X引用,其中X是要引用的项的索引.
虽然我很欣赏它的效率节省,但我们的客户端应用程序无法使用这种格式
Json.NET 有一个设置可以发挥这种魔力......它是“保留对象引用” ,这里是文档的链接:
我想说,您所经历的与文档中的示例类似
一些摘录 (但是,请参阅文档以了解更多详细信息):
让我们有两个人一起收藏吧。有一个小技巧:PreserveReferencesHandling这样设置
string json = JsonConvert.SerializeObject(
people,
Formatting.Indented,
new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects
});
Run Code Online (Sandbox Code Playgroud)
我们可以得到这样的结果:
[
{
"$id": "1",
"Name": "James",
"BirthDate": "1983-03-08T00:00Z",
"LastModified": "2012-03-21T05:40Z"
},
{
"$ref": "1"
}
]
Run Code Online (Sandbox Code Playgroud)
我们所看到的,很可能就是您所经历的。这PreserveReferencesHandling.Objects似乎是你的代码的设置。因此,尝试将其显式设置为None,如下所示:
new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.None;
}
Run Code Online (Sandbox Code Playgroud)
正如文档中所示:
...默认情况下,Json.NET 将按值序列化它遇到的所有对象。如果列表包含两个 Person 引用,并且两个引用都指向同一个对象,那么 JsonSerializer 将写出每个引用的所有名称和值...
所以这应该再次成为默认设置
另一个有趣的读物: 序列化循环引用
| 归档时间: |
|
| 查看次数: |
2358 次 |
| 最近记录: |