2012-08-16 442 views
23

任何人都可以給我一個場景,它可以使用。 我的理解ReferenceLoopHandling.Ignore是如果你有一個對象A引用對象B和B引用C和C再次引用A(A-> B-> C-> A),那麼當序列化時,它會結束在C和A之間無限循環,這可以避免使用下面。我對嗎?Newtonsoft.json中的ReferenceLoopHandling.Ignore究竟幹什麼?

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

我有這被通過使用上述解決自引用循環的問題,但我想知道它到底是什麼做的上述行應用程序的肉(臨界肉)

回答

24

關於這個文件可以在這裏找到:http://james.newtonking.com/projects/json/help/html/SerializationSettings.htm

在撰寫本文時,該行爲有描述如下(重點煤礦):

ReferenceLoopHandling.Error:默認情況下,如果遇到 引用循環,Json.NET將會報錯(否則串行器將進入 無限循環)。

ReferenceLoopHandling.Ignore:Json.NET將忽略 引用循環中的對象並且不會序列化它們。 第一次遇到對象 它將像往常一樣序列化,但如果對象是 作爲其自身的子對象遇到,則序列化器將跳過序列化它的 。

ReferenceLoopHandling.Serialize:該選項強制Json.NET到 序列化參考循環中的對象。如果對象是嵌套的但不是無限期地嵌入,則這很有用。

+0

完美且易於理解。 – 2017-02-07 09:20:56

+2

PreserveReferencesHandling會發生什麼情況? – 2017-02-07 09:21:26