2012-08-16 18 views
23

¿Alguien me puede presentar un escenario donde se puede utilizar? Lo que entiendo por ReferenceLoopHandling.Ignore es si usted tiene un objeto A que hace referencia al objeto B y B hace referencia a C y C nuevamente hace referencia a A (A-> B-> C-> A), luego al serializarlo, terminará en un bucle infinito entre C y A, que se puede evitar utilizando a continuación. ¿Estoy en lo cierto?¿Qué hace ReferenceLoopHandling.Ignore en Newtonsoft.json exactamente?

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

estoy teniendo trata de un bucle de auto referencia, que se resolvió mediante el uso de lo anterior, pero quiero entender exactamente lo que está haciendo que la línea anterior es la carne de la aplicación (carne crítico)

Respuesta

24

la documentación sobre este está disponible aquí: http://james.newtonking.com/projects/json/help/html/SerializationSettings.htm

al escribir estas líneas, el comportamiento se describe allí como sigue (con énfasis mío):

ReferenceLoopHandling.Error: De forma predeterminada, Json.NET generará un error si se encuentra un bucle de referencia (de lo contrario, el serializador entrará en un bucle infinito).

ReferenceLoopHandling.Ignore: Json.NET ignorará objetos en bucles de referencia y no serializarlos. La primera vez que un objeto es encontrado, será serializado como de costumbre, pero si el objeto es encontrado como un objeto secundario de sí mismo, el serializador omitirá serializándolo.

ReferenceLoopHandling.Serialize: Esta opción fuerza a Json.NET a serializar objetos en los bucles de referencia. Esto es útil si los objetos están anidados pero no indefinidamente.

+0

perfecto y fácil de entender. –

+2

¿qué pasará en caso de PreserveReferencesHandling? –

Cuestiones relacionadas