加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何通过引用以前的元素来停止.net JSON序列化?

发布时间:2020-12-15 05:38:29 所属栏目:百科 来源:网络整理
导读:我使用MVC 4.5的MVC / Web API来提供 JSON服务. 一切正常,直到需要公开具有一定量重复数据的大型JSON结果. 对于那些不确定我的意思的人,如果我有一个书籍列表,其中每个都有完整的作者数据,.net将更改同一作者的第二个版本以引用前一个版本,而不是复制数据.在
我使用MVC 4.5的MVC / Web API来提供 JSON服务.

一切正常,直到需要公开具有一定量重复数据的大型JSON结果.

对于那些不确定我的意思的人,如果我有一个书籍列表,其中每个都有完整的作者数据,.net将更改同一作者的第二个版本以引用前一个版本,而不是复制数据.在这些情况下,它使用$X引用,其中X是要引用的项的索引.

虽然我很欣赏它的效率节省,但我们的客户端应用程序无法使用这种格式

解决方法

Json.NET有一个可以做到这一点的设置……它是保存对象引用,这里是 documentation的链接:

我会说,你所经历的,类似于doucmentation中的一个例子

一些摘录(但是,请参阅文档以获取更多详细信息):

我们有两个人的集合.使用一个小技巧:像这样设置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;
}

和在文档中一样:

… By default Json.NET will serialize all objects it encounters by
value. If a list contains two Person references,and both references
point to the same object then the JsonSerializer will write out all
the names and values for each reference…

所以这应该是默认设置

另一个有趣的阅读
Serializing Circular References

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读