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

时间:2012-04-24 10:04:34

标签: c# asp.net-mvc json

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

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”更改为添加类似字符串或整数的内容,则效果很好。我不知道如何添加我的对象会出现什么问题。

任何人都可以向我展示解决方案。欢迎您提出所有问题和答案,非常感谢。

1 个答案:

答案 0 :(得分:17)

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

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