欢迎光临

木子屋

标题: Entity Framework对象序列化出错：检测到循环引用

作者: dnawo

日期: 2013-09-10 01:47 PM

分类: Web编程

内容: 在ASP.NET MVC3中尝试将Entity Framework对象序列化输出，结果出错，代码如下：
复制内容到剪贴板 程序代码public ActionResult Index()
{
testContext context = new testContext();
var data = context.People;
return Json(data, JsonRequestBehavior.AllowGet);
}
错误信息：
引用内容序列化类型为“System.Data.Entity.DynamicProxies.Person_896262438F25FF951FF9F66BD7BE34F10A8A5D962769864829136BF959F99A37”的对象时检测到循环引用。
错误是EF的导航属性导致的，Person对象的Pets属性引用了Person对象导致无限循环，EF下很多问题ToList后通常能解决，但这次不行：
复制内容到剪贴板 程序代码public ActionResult Index()
{
testContext context = new testContext();
var data = context.People.ToList();
return Json(data, JsonRequestBehavior.AllowGet);
}
序列化类型为xxx的对象时检测到循环引用解决方法
方法一：关闭导航功能(不能再使用导航属性)
复制内容到剪贴板 程序代码public ActionResult Index()
{
testContext context = new testContext();
context.Configuration.ProxyCreationEnabled = false;
var data = context.People;
return Json(data, JsonRequestBehavior.AllowGet);
}
方法二：转为匿名对象
复制内容到剪贴板 程序代码public ActionResult Index()
{
testContext context = new testContext();
var data = context.People.Select(item => new { item.Id, item.Name });
return Json(data, JsonRequestBehavior.AllowGet);
}

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.902 ms

返回

标题: Entity Framework对象序列化出错：检测到循环引用

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.902 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.934 ms

返回