【问题标题】:How to serialize as Json an object structure with circular references?如何将具有循环引用的对象结构序列化为 Json?
【发布时间】:2013-07-23 18:39:01
【问题描述】:

我有一个这样的对象结构:

public class Proposal {
    public List<ProposalLine> Lines { get; set; }
    public string Title { get; set; }
}

public class ProposalLine {
    public Proposal Proposal { get; set; }  // <- Reference to parent object
}

我尝试将Proposal序列化为Json,它告诉我有一个循环引用,这是正确的。
不幸的是,我无法触摸这些对象,因为它们位于另一个项目的引用 DLL 中 - 否则我会更改它们。

有没有办法序列化为 Json 并忽略循环属性?

【问题讨论】:

标签: c# json wcf serialization


【解决方案1】:

使用 Newtonsoft.Json(这是默认的 .net json 序列化程序)并设置

JsonSerializerSettings settings = new JsonSerializerSettings
{
    PreserveReferencesHandling = PreserveReferencesHandling.Objects
};
var serializer = JsonSerializer.Create(settings);

如果您正在开发 MVC 应用程序,您也可以全局定义此变量...

【讨论】:

  • 虽然它是一个常用的序列化库(有充分的理由),但它不是默认的。 Microsoft 有 2 个您也可以使用的 JSON 序列化程序。
  • 在 WCF 项目中,默认值为 DataContractJsonSerializer。
  • MS 确实使用了多个序列化程序。 Newtonsoft 用于 Web API,但不用于较旧的控制器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 2022-10-15
相关资源
最近更新 更多