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

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);
}
时间: 2024-10-24 23:49:41

Entity Framework对象序列化出错:检测到循环引用的相关文章

序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用

序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用   详细错误内容为: 不应为数据协定名称为BlogArticle_8F5767B5CA34AC0BBFE8F59DB428937035A9A77CC2917A318A2808A379392602: http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies"的类型"System.Data.Enti

Linq查询中类型的转化以及序列化XXX对象时检测到循环引用

  我有一个Studen类型,有5个字段,num,name,birth,idcard,classId,我们一般写Linq查询的时候就是这样写 List<Student> stus =  from Student s in dc.Student select s;   那么其实我只想用其中的两个字段num,name,我就需要写一个dto StudentDto: num,name List<Student> stus =  from Student s in dc.Student   

小白急问 entity framework dbfrist 部署出错

问题描述 使用efdbfrist模式进行webapi项目开发,在本机上发布后部署没有任何问题,将发布后的文件拷到另外一台电脑上进行部署,webconfig的字符串如下:<connectionStrings><addname="OracleDbContext"providerName="Oracle.ManagedDataAccess.Client"connectionString="UserId=oracle_user;Password=

Samples DataBind FastJson循环引用问题

  Fastjson full support databind, it's simple to use. Encode import com.alibaba.fastjson.JSON; Group group = new Group(); group.setId(0L); group.setName("admin"); User guestUser = new User(); guestUser.setId(2L); guestUser.setName("guest&qu

JavaScript中的内存泄露模式:在JavaScript应用程序中处理循环引用

如果您知道内存泄漏的起因,那么在 JavaScript 中进行相应的防范就应该相当容易.在这篇文章中,作者 Kiran Sundar 和 Abhijeet Bhattacharya 将带您亲历 JavaScript 中的循环引用的全部基本知识,向您介绍为何它们会在某些浏览器中产生问题,尤其是在结合了闭包的情况下.在了解了您应该引起注意的常见内存泄漏模式之后,您还将学到应对这些泄漏的诸多方法. JavaScript 是用来向 Web 页面添加动态内容的一种功能强大的脚本语言.它尤其特别有助于一些日

如何解决Entity Framework查询匿名对象后的跨域访问

在Entity Framework中,可以使用lambda表达式进行对数据的查询,而且可以将查询结果直接映射为对象或者对象列表,这极大的提高的开发速度,并且使数据层的数据更加方便处理和传递.但是很多时候,我们不需要把整个表的字段都查出来,如果我们直接把整个数据实体查询出来,就极大的影响了性能,所以我们需要通过查询匿名对象或者已经定义的方式,对数据库进行查询: 1.实例使用的数据实体类: publicclass Category {publicint Id { get; set; }publics

序列化 循环引用-对象序列化时遇到循环引用

问题描述 对象序列化时遇到循环引用 大致的业务时这样的,简单的来说就是员工的信息中需要显示部门的相关信息,在员工类中定义了部门类型的成员,部门也要中包括员工的姓名等信息,部门类中也定义了员工类的集合.public class Emp(){ protected string name; protected Dept dept; } public class Dept(){ public string name; public List emplist; } 在用javaScriptSerializ

自定义Unity对象生命周期管理集成ADO.NET Entity Framework

在Unity中,从Unity 取得的实例为 Transient.如果你希望使用多线程方式,就需要在组成时使用lifecycle参数,这时候取出的组件就不再是同一个了.在Unity IOC中,它支持我们对于组件的实例进行控制,也就是说我们可以透明的管理一个组件拥有多少个实例.Unity IOC容器提供了如下几种生命处理方式:# Singleton:一个组件只有一个实例被创建,所有请求的客户使用程序得到的都是同一个实例.# Transient:这种处理方式与我们平时使用new的效果是一样的,对于每次

entity framework-DataContractSerializer序列化Entity Framework

问题描述 DataContractSerializer序列化Entity Framework 不应为数据协定名称为"User_647F92716783A5137257C5DF6A549B91C08AA81A98B34D91681C3008710A8A1C:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies"的类型"System.Data.Entity.DynamicProxies.