簡體   English   中英

在 ASP.NET 5 中處理 JSON 循環引用異常

[英]Handling JSON circular reference exception in ASP.NET 5

所以我在 ASP.NET 5 中使用 Web API。在某些時候我的應用程序停止工作,只顯示“Bad Gateway”IIS 錯誤頁面(我在 IIS Express 中按 F5 運行它)。 我花了一段時間才弄清楚問題出在哪里 - 我在 Web API 方法返回的類中引入了一個循環引用,如下所示:

public class CircularParent
{
    public CircularChild Data;

    public CircularParent()
    {
        Data = new CircularChild(this);
    }
}

public class CircularChild
{
    public CircularParent Owner { get; set; }

    public CircularChild(CircularParent owner)
    {
        Owner = owner;
    }
}

結果是JsonSerializationException 我的問題不是如何解決,而是未來如何處理這種情況。 我該如何處理這樣的異常? 或者至少如何記錄它或只是看到它記錄在某處? UseDeveloperExceptionPage()沒有幫助。 UseExceptionHandler(errorApp => errorApp.Run(...))也沒有幫助,執行不會進入errorApp.Run() 調試器不會因異常而中斷。 我在 IIS 中得到的只是那個信息量不足的“壞網關”頁面。

嘗試將最新版本8.0.1-beta3中的Newtonsoft.Json添加到package.json依賴項並使用

services.AddMvc()
    .AddJsonOptions(options => {
        options.SerializerSettings.ReferenceLoopHandling =
            Newtonsoft.Json.ReferenceLoopHandling.Ignore;
    });

有關更多詳細信息,請參閱問題

對於 ASP.NET 核心:

var mvc = services.AddMvc(options =>
{
   //mvc options
});

mvc.AddJsonOptions(options =>
{
    options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});

對於 ASP.NET Core 2.2,使用 Startup.cs 中的 Configure 方法

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    JsonConvert.DefaultSettings = () => new JsonSerializerSettings
    {
        ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
    };
}

這可能是一種迂回的方式,但我做了一個分配了虛擬屬性的數據庫第一次遷移,雖然它起作用了,但它會導致循環引用。 我通過添加解決了這個問題

[JsonIgnore] 

(在我的例子中是 Newtonsoft)到所有虛擬屬性,它運行良好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM