![](/img/trans.png)
[英]Is this still the way to handle JSON serializer circular reference exception in asp.net MVC
[英]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.