Подтвердить что ты не робот

Что конкретно делает ReferenceLoopHandling.Ignore в Newtonsoft.json?

Может ли кто-нибудь представить мне сценарий, где он может быть использован. То, что я понимаю по ReferenceLoopHandling.Ignore, - это если у вас есть объект A, который ссылается на объекты B и B, ссылки C и C снова ссылаются на A (A- > B- > C- > A), а затем при сериализации, он окажется в бесконечном цикле между C и A, чего можно избежать, используя ниже. Я прав?

 JsonConvert.SerializeObject(data, 
     Formatting.Indented, 
     new JsonSerializerSetting()
         {
             ReferenceLoopHandling = ReferenceLoopHandling.Ignore 
         } 
 ));

У меня проблема с саморегуляцией, которая решена с использованием приведенного выше, но я хочу точно понять, что он делает, поскольку указанная выше строка - это мясо приложения (критическое мясо)

4b9b3361

Ответ 1

Документацию по этому адресу можно найти здесь: http://james.newtonking.com/projects/json/help/html/SerializationSettings.htm

На момент написания этого описания поведение описывается следующим образом (с акцентом на мой):

ReferenceLoopHandling.Error: По умолчанию Json.NET будет ошибочно, если (в противном случае сериализатор попадет в бесконечный цикл).

ReferenceLoopHandling.Ignore: Json.NET будет игнорировать объекты в и не сериализуйте их. В первый раз, когда объект столкнувшись с ним, он будет сериализован как обычно, но если объект встречающийся как дочерний объект сам по себе, сериализатор пропустит сериализуя его.

ReferenceLoopHandling.Serialize: этот параметр заставляет Json.NET сериализуйте объекты в контрольных циклах. Это полезно, если объекты вложенных, но не бесконечно.