【问题标题】:A circular reference was detected while serializing an object of type序列化类型对象时检测到循环引用
【发布时间】:2012-05-04 23:07:45
【问题描述】:

我在我的控制器中尝试了这段代码:

List<ProductListingModels> prom = new List<ProductListingModels>();

prom.Add(new ProductListingModels()
{
    ID = item.ID,
    Name = item.Name,
    DepartmentID = item.DepartmentID.Value,
    BrandID = item.BrandID.Value
});

jr.Data = prom;
jr.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return Json(new
{
    ja = jr.Data,
}, JsonRequestBehavior.AllowGet);

这是我的 ProductListingModel :

 public class ProductListingModels:ItemEntityDataContext
 {
   public int ID { get; set; }
   public string Name { get; set; }
   public int DepartmentID { get; set; }
   public int BrandID { get; set; }
 }

这是一个错误:

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

但是,如果我从添加对象“prom”更改为添加字符串或整数之类的东西,效果会很好。我不知道如何添加我的对象会发生什么问题。

谁能告诉我解决方案。欢迎您的所有问题和回答,非常感谢。

【问题讨论】:

  • 对;我们正在序列化jr.Data,也就是prom,这是一个带有单个项目的List&lt;ProductListingModels&gt;,由IdNameDepartmentIDBrandID组成——我们可以看看ProductListingModels所以我们可以看到这里的类型是什么,它还定义了什么?
  • 它有任何特定的基类吗?或任何其他字段/属性?
  • 基本上,我可以在本地复制它工作正常,即"{\"ja\":[{\"ID\":123,\"Name\":\"abc\",\"DepartmentID\":456,\"BrandID\":789}]}"
  • 我仍然认为没有问题。这真的是 ProductListingModel 类的全部内容吗? ProductListingModel 是否继承自另一个类?
  • 感谢大家的回答,我已经准备好继承 ProductListingModel 类了。

标签: c# asp.net-mvc json


【解决方案1】:

我怀疑问题出在 ItemEntityDataContext 超类可能持有其他对象的引用上。将数据复制到视图模型类以传递给视图始终是一个好主意。但是,在您的情况下,只需使用 LINQ 将字段选择为新的匿名类型并使用 json 进行序列化。像这样的:

jr.Data = prom.Select(p => new 
{ 
    ID = p.ID, 
    Name = p.Name, 
    DepartmentID = p.DepartmentID,
    BrandID = p.BrandID
}).ToArray();

【讨论】:

  • 我的罪魁祸首是数据类中的 Xelement
猜你喜欢
  • 2012-12-01
  • 1970-01-01
  • 2015-01-21
  • 2010-11-12
  • 2013-04-23
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多