36

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

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

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

4

1 に答える 1

45

これに関するドキュメントは、http: //james.newtonking.com/projects/json/help/html/SerializationSettings.htmから入手できます。

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

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

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

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

于 2013-01-07T22:53:03.223 に答える