在Newtonsoft.json中,ReferenceLoopHandling.Ignore究竟做了什么?

Dot*_*nfo 29 .net c# json json.net

任何人都可以向我展示可以使用它的场景.我通过ReferenceLoopHandling.Ignore理解的是,如果你有一个对象A引用对象B和B引用C和C再次引用A(A-> B-> C-> A),那么在序列化时,它将最终无穷无尽在C和A之间循环,可以使用下面的方法避免.我对吗?

 JsonConvert.SerializeObject(data, 
     Formatting.Indented, 
     new JsonSerializerSetting()
         {
             ReferenceLoopHandling = ReferenceLoopHandling.Ignore 
         } 
 ));
Run Code Online (Sandbox Code Playgroud)

我有自我引用循环问题,通过使用上面的问题得到解决,但我想知道它正在做什么,因为上面的行是应用程序的关键(关键肉)

Duc*_*tro 38

有关此文档,请访问:http://james.newtonking.com/projects/json/help/html/SerializationSettings.htm

在撰写本文时,行为的描述如下(强调我的):

ReferenceLoopHandling.Error:默认情况下,如果遇到引用循环,Json.NET将会出错(否则序列化程序将进入无限循环).

ReferenceLoopHandling.Ignore:Json.NET将忽略引用循环中的对象而不是序列化它们.第一次遇到对象时,它将像往常一样序列化,但如果对象作为自身的子对象遇到,则序列化程序将跳过序列化它.

ReferenceLoopHandling.Serialize:此选项强制Json.NET序列化引用循环中的对象.如果对象嵌套但不是无限期,这将非常有用.

  • 在PreserveReferencesHandling的情况下会发生什么? (4认同)