序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用
序列化类型 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创建代理。