Newtonsoft.json 中的 ReferenceLoopHandling.Ignore 究竟是什么意思?

38
有没有人能给我提供一个可以使用的场景。 我理解的ReferenceLoopHandling.Ignore是,如果你有一个对象A引用了对象B,B又引用了C,而C又引用了A(A->B->C->A),那么在序列化时,将会在C和A之间形成无限循环,这可以通过以下方式避免。我理解得对吗?
 JsonConvert.SerializeObject(data, 
     Formatting.Indented, 
     new JsonSerializerSetting()
         {
             ReferenceLoopHandling = ReferenceLoopHandling.Ignore 
         } 
 ));

我遇到了自引用循环问题,使用上面的方法可以解决,但我想确切地了解它在做什么,因为上面的代码是应用程序的精华(关键部分)


2
JsonSerializerSettings() - I Stand With Russia
1个回答

47

相关文档可在此处查看:http://james.newtonking.com/projects/json/help/html/SerializationSettings.htm

截至本篇文章撰写之时,其行为描述如下(重点标注在下文中):

ReferenceLoopHandling.Error: 默认情况下,当遇到引用循环时Json.NET将会出错(否则序列化器将进入无限循环状态)。

ReferenceLoopHandling.Ignore: Json.NET将忽略引用循环中的对象并不会对它们进行序列化。第一次遇到对象时会像通常一样进行序列化,但如果该对象作为其自身的子对象被遇到时,序列化器将跳过对该对象的序列化。

ReferenceLoopHandling.Serialize: 此选项强制Json.NET序列化引用循环中的对象。这在对象嵌套但不是无限的情况下非常有用。


4
如果选择保留引用处理(PreserveReferencesHandling),会发生什么? - Bimal Das

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接