Как я должен иметь дело с C # для сериализации JSON и циклических ссылок? - PullRequest
4 голосов
/ 17 июня 2011

Я использую System.Web.Script.Serialization.JavaScriptSerializer, содержащийся в DLL-библиотеке System.Web.Extentions. У меня есть несколько циклических ссылок, таких как базовые отношения «многие ко многим» и отношения «родитель-ребенок». Как я могу справиться с этим? У нас была идея заменить реальные ссылки на объекты на внешние ключи. Например, вместо этого:

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 ]

3 голосов
/ 17 июня 2011

Обычный подход заключается в использовании [ScriptIgnore] со ссылкой на родительский узел, например:

public class Node {
  [ScriptIgnore]
  public Node Parent { get; set; }    
  public ICollection<Node> Children { get; set; }
}
1 голос
/ 29 июня 2011

Json.NET был именно тем, что я искал. Однако другой вариант - создать анонимный тип и сериализовать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...