2012-04-24 78 views
13

的目的我在我的控制器尝试这种代码:循环引用而串行化类型

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”更改为添加类似字符串或整数的东西,它的效果很好。我不知道如何添加我的对象发生了什么问题。

任何人都可以告诉我解决方案。欢迎来到您的所有问题和答案,非常感谢。

+0

right;我们用包含'Id','Name','DepartmentID'和'BrandID'的单个项目序列化'jr.Data',它是'prom',它是'List ''请参阅ProductListingModels,以便我们了解这些类型在哪里,以及它定义了什么? – 2012-04-24 10:14:49

+0

谢谢。现在我添加了它。 – Nothing 2012-04-24 10:19:32

+0

它有任何特定的基类吗?或任何其他领域/属性? – 2012-04-24 10:27:46

回答

17

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

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