2013-07-23 92 views
5

我有一个对象的结构是这样的:如何将带有循环引用的对象结构序列化为Json?

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 
} 

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

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

+1

你可以试试[JSon.NET](http://james.newtonking.com/projects/json-net.aspx),它支持循环引用。 –

+2

如果你想忽略循环引用,你应该设置'ReferenceLoopHandling.Ignore'(参见:http://james.newtonking.com/projects/json/help/html/T_Newtonsoft_Json_ReferenceLoopHandling.htm) – oakio

回答

5

使用Newtonsoft.Json(这是默认的.NET JSON序列化),并设置

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

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

+0

虽然它是一个常用的序列化库(原因很好),这不是默认设置。微软也有2个JSON序列化器可以使用。 – Aidiakapi

+0

在WCF项目中,默认值是DataContractJsonSerializer。 –

+0

MS确实使用多个序列化器。 Newtonsoft在Web API上使用,但不在较早的控制器上使用。 – Robert

相关问题