序列化类型的对象时检测到循环引用

原创 2017年06月02日 12:11:39
 问题代码
public ActionResult SelectAllForClasses()
        {
            var lists = db.OEE_Team.ToList();
            var result = new { lists = db.OEE_Team };
            return Json(result, JsonRequestBehavior.AllowGet);
       }


运行后错误信息如下

Server Error in '/' Application.

A circular reference was detected while serializing an object of type 'System.Data.Entity.DynamicProxies.BaseUser_08FCB4D1A67AD4A15169A1228CF2AE9BD99F78546715A4E4AF5E8E73F3A36322'.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: A circular reference was detected while serializing an object of type 'System.Data.Entity.DynamicProxies.BaseUser_08FCB4D1A67AD4A15169A1228CF2AE9BD99F78546715A4E4AF5E8E73F3A36322'.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 
 


 

 解决方案:
public ActionResult SelectAllForClasses()
{

        var list = from tm in db.OEE_Team
                       select new
                       {
                           ID = tm.ID,
                           Name = tm.Name,
                           LeaderUserID = tm.LeaderUserID
                       };
            var lists = from ea in list
                        select new
                        {
                            ID = ea.ID,
                            Name = ea.Name,
                            LeaderUserID = ea.LeaderUserID
                        };
            return Json((lists).ToList(), JsonRequestBehavior.AllowGet); 
}
问题原因:

这两个表有1对多的实体映射关系。在生成的实体模型中,他们是可以通过这个一对多的映射关系查找相互之间的数据的。在上面的第5行代码里面,这只是定义了一个Linq查询语句并且找出第一条数据,这是没有什么问题。在这个过程中,会自动查找与之有映射关系的数据。第9行代码是在MVC里面返回一个json对象的数据,在这个过程中将我们找到的这条数据进行序列化为json对象的一个过程。在这个过程的时候,由于这个对象有映射关系,那么它在序列化t_saleform对象的时候会序列化该对象的属性t_saleform_detail对象,而这个属性t_saleform_detail对象又有属性t_saleform对象对象,依次反复。就导致了这个问题的产生。 

 


原理解释:
这个时候就不能直接序列化了,要重新定义一个实体,把表中的属性都放里面,序列化这个实体即可。 同时这样也符合ViewModel的独立性,不直接依赖与数据库实体。 

版权声明:本文为博主原创文章,未经博主允许不得转载。

EF提示“序列化类型为XXX的对象时检测到循环引用”

MVC中使用Json的时候:首先考虑运行HTTP中的Get请求和导航属性造成的循环引用(而循环引用使用匿名内部类)。...

EntityFramework 序列化类型为XX的对象时检测到循环引用

最近某些巧合下重拾.net 使用ef5 开发一个小型项目。 在项目里遇到 ef 外键关系导致 解析json时出现循环引用的错误。 自己查询相关资料总结了两条最好的解决方案,如下。 ★第一种 如果是...

序列化类型为XX的对象时检测到循环引用

我有一个Studen类型,有5个字段,num,name,birth,idcard,classId,我们一般写Linq查询的时候就是这样写 ListStudent> stus =  from Stud...

序列化类型为XX的对象时检测到循环引用。

刚才在用MVC2+EF做东西时,涉及到要给一个表序列化成json对象,方便前台ajax调用。 结果,前台调用时,怎么也得不到想要的结果,每次都会报一个 序列化类型为XX的对象时检测到循环引用类似的错...
  • sb1ue
  • sb1ue
  • 2011年11月13日 14:14
  • 25013

序列化类型为“×××的对象时检测到循环引用

mvc+ef使用jqgrid读取数据。使用ajax获取数据。时出现 序列化类型为“System.Data.Entity.DynamicProxies.SysUserRole_A4BFAF33439F0...

对象循环引用与序列化问题

几种序列化方案对循环引用的对象的处理及一般规律

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

根据我们不同的需要,我们会在不同的时候选择序列化和反序列化,从而得到我们想要的对象或者字符串。     今天在用MVC+EF做一个简单查询的时候,当返回json格式的数据时出现问题了。 ...

EF提示“序列化类型为XXX的对象时检测到循环引用”

首先介绍一下事情的来龙去脉: 今天在编写MVC页面想要进行Ajax请求的时候发现老是报错,由于是Ajax所以错误没有直接在页面上显示出来,之后在开发人员工具中发现报错: 序列化类型为“【中间一大串...

序列化类型为“System.Data.Entity.DynamicProxies.Photos....这个会的对象时检测到循环引用

为什么 序列化类型为“System.Data.Entity.DynamicProxies.Photos....这个会的对象时检测到循环引用。 今天遇到下面这个问题,小子留了下来供大家...
  • E_eric
  • E_eric
  • 2013年04月17日 21:16
  • 1444

InnerException 消息是“反序列化对象 属于类型 *** 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。(注意细节)

如何解决:格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: formDataXml。InnerException 消息是“反序列化对象...
  • yang_5
  • yang_5
  • 2013年09月17日 16:29
  • 10971
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:序列化类型的对象时检测到循环引用
举报原因:
原因补充:

(最多只允许输入30个字)