2011-06-17 24 views
4

我正在使用System.Web.Extentions DLL中包含的System.Web.Script.Serialization.JavaScriptSerializer。我有幾個循環引用,如基本的多對多關係和父子關係。我該如何處理這些問題?我們有一個想法是用外鍵替換實際的對象引用。例如,而不是這樣的:我應該如何處理C#到JSON序列化和循環引用?

public class Node { 
    public Node Parent { get; set; } 
    public ICollection<Node> Children { get; set; } 
} 

我們這樣做:

public class Node { 
    public long ParentID { get; set; } 
    public ICollection<long> ChildrenIDs { get; set; } 
} 

我想過使用ScriptIgnore屬性但你怎麼連使用與許多一對多的關係?建議和建議,將不勝感激。謝謝!

編輯:下面是多對多關係的一些示例類。

public class Student { 
    public long StudentID { get; private set; } 
    public ICollection<Class> Classes { get; set; } 
} 

public class Class { 
    public long ClassID { get; private set; } 
    public ICollection<Student> Students { get; set; } 
} 

回答

1

Json.NET正是我一直在尋找。不過,另一種選擇是創建一個匿名類型並將其序列化。

3

通常的方法是使用[ScriptIgnore]與像父節點參考:

public class Node { 
    [ScriptIgnore] 
    public Node Parent { get; set; }  
    public ICollection<Node> Children { get; set; } 
} 
+0

我該如何處理多對多關係? – OpticalDelusion

+2

爲此,您必須使用Json.NET。它的最新版本支持序列化循環的n對n關係。在幫助中查看[保留對象引用](http://james.newtonking.com/projects/json/help/PreserveObjectReferences.html)。 –

相關問題