2012-04-24 32 views
13

Tôi đã thử mã này trong bộ điều khiển của tôi:Một tham chiếu vòng tròn đã được phát hiện trong khi xuất một đối tượng kiểu

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); 

Đây là ProductListingModel tôi:

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

Đó là một lỗi:

Một tham chiếu vòng tròn được phát hiện khi sắp xếp một đối tượng thuộc loại.

Nhưng nếu tôi thay đổi từ việc thêm đối tượng "prom" để thêm thứ gì đó như chuỗi hoặc số nguyên, Nó hoạt động tốt. Tôi không biết vấn đề gì xảy ra với cách thêm đối tượng của mình.

Mọi người có thể hiển thị cho tôi giải pháp hay không. Chào mừng bạn đến với tất cả câu hỏi và câu trả lời của bạn, Cảm ơn rất nhiều.

+0

right; chúng tôi đang tuần tự hóa 'jr.Data', là' prom', là một 'List ' với một mục duy nhất, bao gồm 'Id',' Name', 'DepartmentID' và' BrandID' - chúng ta có thể xin vui lòng xem 'ProductListingModels' để chúng ta có thể thấy những gì các loại ở đây, và những gì khác nó định nghĩa? –

+0

Cảm ơn. bây giờ tôi đã thêm nó. – Nothing

+0

nó có bất kỳ lớp cơ sở cụ thể nào không? hoặc bất kỳ trường/thuộc tính nào khác? –

Trả lời

17

Tôi nghi ngờ vấn đề là với tham chiếu ItemEntityDataContext superclass có thể giữ cho các đối tượng khác. Bạn nên sao chép dữ liệu của mình vào lớp viewmodel để chuyển sang chế độ xem. Trong trường hợp của bạn tuy nhiên chỉ cần sử dụng LINQ để chọn các lĩnh vực vào loại vô danh mới và serialize với json. Một cái gì đó như thế này:

jr.Data = prom.Select(p => new 
{ 
    ID = p.ID, 
    Name = p.Name, 
    DepartmentID = p.DepartmentID, 
    BrandID = p.BrandID 
}).ToArray(); 
Các vấn đề liên quan