オブジェクトのリストをシリアル化するときに、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 サイトの他の関連記事を参照してください。