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

时间:2012-08-16 01:47:24

标签: c# .net json json.net

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

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

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

1 个答案:

答案 0 :(得分:33)

此处的文档可在此处找到:http://james.newtonking.com/projects/json/help/html/SerializationSettings.htm

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

  

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

     

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

     

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