2013-07-23 35 views
5

Tôi có một cấu trúc đối tượng như thế này:Làm thế nào để tuần tự hóa thành Json một cấu trúc đối tượng với tham chiếu vòng tròn?

public class Proposal { 
    public List<ProposalLine> Lines { get; set; } 
    public string Title { get; set; } 
} 

public class ProposalLine { 
    public Proposal Proposal { get; set; } // <- Reference to parent object 
} 

tôi cố gắng serialize Proposal như Json, nó nói với tôi rằng có một tham chiếu vòng tròn, đó là chính xác.
Thật không may, tôi không thể chạm vào các đối tượng, vì chúng nằm trong một DLL được tham chiếu từ một dự án khác - nếu không tôi sẽ thay đổi chúng.

Có cách nào để tuần tự hóa thành Json và bỏ qua các thuộc tính tròn không?

+1

Bạn có thể thử [JSon.NET] (http://james.newtonking.com/projects/json-net.aspx) hỗ trợ tham chiếu vòng tròn. –

+2

Nếu bạn muốn bỏ qua tham chiếu vòng tròn, bạn nên đặt 'ReferenceLoopHandling.Ignore' (xem: http://james.newtonking.com/projects/json/help/html/T_Newtonsoft_Json_ReferenceLoopHandling.htm) – oakio

Trả lời

5

Sử dụng Newtonsoft.Json (đó là serializer mặc định .net json) và thiết lập

JsonSerializerSettings settings = new JsonSerializerSettings 
{ 
    PreserveReferencesHandling = PreserveReferencesHandling.Objects 
}; 
var serializer = JsonSerializer.Create(settings); 

Bạn cũng có thể xác định trên toàn cầu biến này nếu bạn đang phát triển ứng dụng MVC ...

+0

Mặc dù đó là thư viện tuần tự hóa thường được sử dụng (vì lý do tốt) nó không phải là mặc định. Microsoft có 2 serializers JSON bạn cũng có thể sử dụng. – Aidiakapi

+0

Trong dự án WCF, mặc định là DataContractJsonSerializer. –

+0

MS thực sự sử dụng nhiều serializers. Newtonsoft được sử dụng trên Web API nhưng không được sử dụng trên các bộ điều khiển cũ hơn. – Robert

Các vấn đề liên quan