2012-08-16 26 views
23

Czy ktoś może mi przedstawić scenariusz, w którym można go użyć. Co rozumiem przez ReferenceLoopHandling.Ignore jest jeśli masz obiekt A, który odwołuje się do obiektów B i B, referencje C i C ponownie odwołują się do A (A-> B-> C-> A), wtedy po serializacji kończy się w nieskończonej pętli między C i A, czego można uniknąć używając poniżej. Czy mam rację?Co dokładnie robi ReferenceLoopHandling.Ignore w Newtonsoft.json?

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

Mam własny odwołań problem pętli, która zostanie rozwiązany przy użyciu wyżej, ale chcę, aby zrozumieć dokładnie, co robi jako powyższej linii jest mięso aplikacji (krytyczny mięso)

Odpowiedz

24

dokumentacja na ten temat można znaleźć tutaj: http://james.newtonking.com/projects/json/help/html/SerializationSettings.htm

w chwili pisania tego, zachowanie jest tam opisane w następujący sposób (z naciskiem kopalni):

ReferenceLoopHandling.Error: Domyślnie Json.NET wystąpi błąd, jeśli napotkana zostanie pętla referencyjna (w przeciwnym razie seralizator dostanie się do nieskończonej pętli).

ReferenceLoopHandling.Ignore: Json.NET zignoruje obiektów w pętli odniesienia, a nie ich serializacji. Po pierwszym napotkaniu obiektu zostanie on serializowany w zwykły sposób, ale jeśli obiekt jest napotkany jako obiekt potomny, to serializator pominie numer seryjny .

ReferenceLoopHandling.Serialize: Ta opcja zmusza Json.NET do serializacji obiektów w pętlach odniesienia. Jest to użyteczne, jeśli obiekty są zagnieżdżone, ale nie są w nieskończoność.

+0

idealny i łatwy do zrozumienia. –

+2

co stanie się w przypadku PreserveReferencesHandling? –

Powiązane problemy