ホームページ > バックエンド開発 > C++ > JSON.Net でオブジェクトのリストをシリアル化するときに発生する「自己参照ループが検出されました」例外を解決するにはどうすればよいですか?

JSON.Net でオブジェクトのリストをシリアル化するときに発生する「自己参照ループが検出されました」例外を解決するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-28 07:56:10
オリジナル
677 人が閲覧しました

How to Resolve the

JSON.Net での「自己参照ループが検出されました」例外

オブジェクトのリストをシリアル化するときに、JSON.Net で「自己参照ループが検出されました」例外が発生することがあります。このエラーは、シリアル化されたオブジェクト グラフ内に循環参照がある場合に発生します。

特定の問題

提供されたコード スニペット:

public ActionResult getRouteFromPart(int partId)
{
    List<Route> routes = _routeService.GetRouteByPartType(partId);
    ...
    return this.AdvancedJsonResult(new
    {
        Routes = routes
    }, JsonRequestBehavior.AllowGet);
}
ログイン後にコピー

ルートのリストをシリアル化しようとしたときに例外が発生しましたオブジェクト。

解決策

例外は、Route オブジェクト グラフ内に循環参照があることを示します。具体的には、エラー メッセージには「routes[0].incomingLots[0].partNumber.partType.partNumbers」のパスが記載されています。これは、Route オブジェクトと PartNumber オブジェクトの間に関係があり、参照によってループが発生していることを示唆しています。

この問題を解決するには、JSON.Net シリアライザーを構成して、シリアル化中に自己参照ループを無効にできます。次のような設定:

var settings = new JsonSerializerSettings
{
    ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
ログイン後にコピー

この設定は、循環参照を無視してシリアル化を続行するように JSON.Net に指示します。 process.

完全な例外メッセージ

Self referencing loop detected with type 'System.Data.Entity.DynamicProxies.PartNumber_B135A5D16403B760C3591872ED4C98A25643FD10B51246A690C2F2D977973452'. Path 'routes[0].incomingLots[0].partNumber.partType.partNumbers'.
ログイン後にコピー

以上がJSON.Net でオブジェクトのリストをシリアル化するときに発生する「自己参照ループが検出されました」例外を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート