2011-06-17 10 views
4

System.Web.Extentions DLLに含まれるSystem.Web.Script.Serialization.JavaScriptSerializerを使用しています。私は基本的な多対多の関係や親子関係のようないくつかの循環参照を持っています。どうすればこれらに対処できますか?私たちが持っていた1つのアイデアは、実際のオブジェクト参照を外部キーに置き換えることでした。たとえば、代わりのこの: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)を参照してください。 –

関連する問題