web-dev-qa-db-ja.com

Newtonsoft.jsonのReferenceLoopHandling.Ignoreは正確に何をしますか?

誰かが私にそれを使用できるシナリオを提示できますか? ReferenceLoopHandling.Ignoreで理解できるのは、オブジェクトAがオブジェクトBを参照し、BがCを参照し、Cが再びAを参照する場合(A-> B-> C-> A)、シリアル化する場合です。 、それはCとAの間の無限ループになり、以下を使用して回避できます。私は正しいですか?

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

上記を使用して解決される自己参照ループの問題がありますが、上記の行がアプリケーションの重要部分(重要な重要部分)であるため、それが何をしているのかを正確に理解したい

29
DotNetInfo

これに関するドキュメンテーションはここにあります: http://james.newtonking.com/projects/json/help/html/SerializationSettings.htm

この記事を書いている時点では、動作は次のように説明されています(私のものを強調しています)。

ReferenceLoopHandling.Error:デフォルトでは、参照ループが発生するとJson.NETはエラーになります(それ以外の場合、シリアライザは無限ループに入ります)。

ReferenceLoopHandling.Ignore:Json.NETは参照ループ内のオブジェクトを無視し、シリアル化しません。 オブジェクトが最初に検出されたときは通常どおりにシリアル化されますが、オブジェクトがそれ自体の子オブジェクトとして検出された場合、シリアライザはシリアル化をスキップします。

ReferenceLoopHandling.Serialize:このオプションは、Json.NETが参照ループでオブジェクトをシリアル化するように強制します。これは、オブジェクトが入れ子になっているが無期限ではない場合に便利です。

36
DuckMaestro