2012-04-24 26 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();