如何将具有循环引用的对象结构序列化为Json?

5

我有一个如下所示的对象结构:

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并忽略循环属性?


1
你可以尝试使用支持循环引用的JSon.NET - Mike Christensen
2
如果您想忽略循环引用,您应该设置 ReferenceLoopHandling.Ignore(参见:http://james.newtonking.com/projects/json/help/html/T_Newtonsoft_Json_ReferenceLoopHandling.htm) - oakio
1个回答

8
使用Newtonsoft.Json(默认的.NET JSON序列化程序),并设置
JsonSerializerSettings settings = new JsonSerializerSettings
{
    PreserveReferencesHandling = PreserveReferencesHandling.Objects
};
var serializer = JsonSerializer.Create(settings);

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


虽然它是一个常用的序列化库(有很好的原因),但它不是默认的。微软还有两个可以使用的JSON序列化器。 - Aidiakapi
在WCF项目中,默认使用DataContractJsonSerializer。 - Akira Yamamoto
微软确实使用多个序列化程序。在Web API中使用Newtonsoft,但在旧的控制器上不使用它。 - Robert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接