我应该如何处理C#到JSON序列化和循环引用?

时间:2011-06-17 14:28:31

标签: c# .net json serialization

我正在使用System.Web.Extentions DLL中包含的System.Web.Script.Serialization.JavaScriptSerializer。我有几个循环引用,例如基本的多对多关系和父子关系。我该如何处理这些?我们的一个想法是用外键替换实际的对象引用。例如,而不是:

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; }
}

2 个答案:

答案 0 :(得分:3)

通常的方法是将[ScriptIgnore]与父节点引用一起使用,如:

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

答案 1 :(得分:1)

Json.NET正是我想要的。但另一个选择是创建一个匿名类型并序列化它。