2012-08-16 16 views
23

Qualcuno mi può presentare uno scenario in cui può essere utilizzato. Che cosa capisco di ReferenceLoopHandling.Ignore è se si dispone di un oggetto A che fa riferimento agli oggetti B e B riferimenti C e C di nuovo riferimenti A (A-> B-> C-> A), quindi durante la serializzazione, terminerà in loop infinito tra C e A, che può essere evitato usando sotto. Ho ragione?Che cosa fa esattamente ReferenceLoopHandling.Ignore in Newtonsoft.json?

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

Sto avendo auto riferimenti problema anello che viene risolto utilizzando il sopra, ma voglio capire esattamente quello che sta facendo come la linea di cui sopra è la carne della domanda (carne critico)

risposta

24

la documentazione su questo è disponibile qui: http://james.newtonking.com/projects/json/help/html/SerializationSettings.htm

momento in cui scriviamo, il comportamento è descritto non come segue (con sottolineatura mia):

ReferenceLoopHandling.Error: Per impostazione predefinita, Json.NET eseguirà un errore se viene rilevato un loop di riferimento (altrimenti il ​​serializzatore entrerà in un ciclo infinito).

ReferenceLoopHandling.Ignore: Json.NET ignorerà oggetti in cicli di riferimento e non li serializzare. La prima volta che un oggetto è rilevato, verrà serializzato come al solito ma se l'oggetto è rilevato come oggetto figlio di se stesso, il serializzatore salterà la serializzazione di .

ReferenceLoopHandling.Serialize: questa opzione forza Json.NET a serializzare gli oggetti nei loop di riferimento. Ciò è utile se gli oggetti sono nidificati ma non indefinitamente.

+0

perfetto e facile da capire. –

+2

cosa succederà in caso di PreserveReferencesHandling? –

Problemi correlati