序列化類型 System.Data.Entity.DynamicProxies 的對象時檢測到循環引用
entity famework+asp.net mvc 做code first項目的時候,前台ajax請求到后台 JsonResult
在后台返回 return Json(list, JsonRequestBehavior.AllowGet)的時候,出錯:
序列化類型 System.Data.Entity.DynamicProxies 的對象時檢測到循環引用。
解決方法:
1.可以在查詢的時候這樣子
var list = from f in db.Categories
//這里要select new
select new
{
Id = f.Id,
Name = f.Name,
};
2.你可以嘗試刪除所有的導航屬性的virtual關鍵字禁用延遲加載和創建代理,然后使用預先加載,而不是顯式地加載所需的對象圖:
public ActionResult GetAll()
{
return Json(Context.Categories
.Include(o => o.Products)
,
JsonRequestBehavior.AllowGet);
}
看起來像是不依賴於延遲加載,無論如何,因為你使用virtual屬性延遲加載對象圖,可能會造成現在的系列化的麻煩。
3.沒有必要刪除virtual關鍵字導航性能(這將使延遲加載的模型完全不可能)。這足以創建代理(以及禁用延遲加載)禁用代理擾亂序列一樣,具體情況:
Context.Configuration.ProxyCreationEnabled = false;
這將禁用,僅適用於特定的上下文實例Context創建代理。