web-dev-qa-db-fra.com

Que fait ReferenceLoopHandling.Ignore dans Newtonsoft.json exactement?

Quelqu'un peut-il me présenter un scénario où il peut être utilisé. Ce que je comprends par ReferenceLoopHandling.Ignore est si vous avez un objet A qui fait référence à l'objet B et B référence C et C référence à nouveau A (A-> B-> C-> A), puis lors de la sérialisation , il se retrouvera en boucle sans fin entre C et A, ce qui peut être évité en utilisant ci-dessous. Ai-je raison?

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

J'ai un problème de boucle d'auto-référencement qui est résolu en utilisant ce qui précède, mais je veux comprendre exactement ce qu'il fait car la ligne ci-dessus est la viande de l'application (viande critique)

29
DotNetInfo

La documentation à ce sujet est disponible ici: http://james.newtonking.com/projects/json/help/html/SerializationSettings.htm

Au moment de la rédaction de ce document, le comportement y est décrit comme suit (avec emphase sur le mien):

ReferenceLoopHandling.Error: Par défaut, Json.NET générera une erreur si une boucle de référence est rencontrée (sinon le sérialiseur entrera dans une boucle infinie).

ReferenceLoopHandling.Ignore: Json.NET ignorera les objets dans les boucles de référence et ne les sérialisera pas. La première fois qu'un objet est rencontré, il sera sérialisé comme d'habitude, mais si l'objet est rencontré comme un objet enfant de lui-même, le sérialiseur sautera la sérialisation.

ReferenceLoopHandling.Serialize: Cette option force Json.NET à sérialiser les objets dans les boucles de référence. Ceci est utile si les objets sont imbriqués mais pas indéfiniment.

36
DuckMaestro