繁体   English   中英

实体到 json 错误 - 序列化类型对象时检测到循环引用

[英]Entity to json error - A circular reference was detected while serializing an object of type

尝试将实体对象转换为 JSON 字符串时发生以下错误。 我将 C# MVC4 与代码优先数据库设计一起使用。 它接缝是因为 FK 和表之间的关系造成了这个问题。 解决方法是什么?

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

我的代码是

  User ma = db.user.First(x => x.u_id == id);
  return Json(ma, JsonRequestBehavior.AllowGet);

这是因为它正在尝试加载子对象,并且它可能会创建一些永远不会结束的循环(a=>b, b=>c, c=>d, d=>a)

您只能在特定时刻将其关闭,如下所示。因此,除非在您的对象上调用 Include 方法,否则 dbcontext 不会加载客户子对象

  db.Configuration.ProxyCreationEnabled = false;
  User ma = db.user.First(x => x.u_id == id);
  return Json(ma, JsonRequestBehavior.AllowGet);

我的问题是通过使用这个解决的:

//initialize model db
testdbEntities dc = new testdbEntities();
//get employee details 
List<Employee1> lst = dc.Employee1.ToList(); 
//selecting the desired columns
var subCategoryToReturn = lst.Select(S => new {
    Employee_Id = S.Employee_Id,
    First_Name = S.First_Name,
    Last_Name = S.Last_Name,
    Manager_Id = S.Manager_Id
});
//returning JSON
return this.Json(subCategoryToReturn , JsonRequestBehavior.AllowGet);

我遇到了同样的问题,我所做的是只通过了需要的列来查看,就我而言。 只有 2。

List<SubCategory> lstSubCategory = GetSubCateroy() // list from repo

 var subCategoryToReturn = lstSubCategory.Select(S => new { Id  = S.Id, Name = S.Name }); 

return this.Json(subCategoryToReturn , JsonRequestBehavior.AllowGet);

将对象序列化为 JSON 时循环引用检测到异常

为什么不创建一个类来保存查询内容? 那对我有用

它正在尝试加载子对象,并且它可能会创建一些永远不会结束的循环循环属性。

你也使用 [ScriptIgnore] ,不会序列化公共属性或公共字段,看看这个:

   public class BookingHotel : IntBaseEntity            
    {    
        public string BookingName { get; set; }    
        public string BookingReference { get; set; }    
        public DateTime? CheckInDate { get; set; }    
        public DateTime? CheckOutDate { get; set; }    
        public int HotelId { get; set; }    
        [ScriptIgnore]    
        public Hotel Hotel { get; set; }        
     }         

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM