2013-07-23 6 views
5

Ich habe eine Objektstruktur wie folgt aus:Wie man als Json eine Objektstruktur mit zirkulären Referenzen serialisiert?

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 
} 

Ich versuche Vorschlag als Json zu serialisiert, es sagt mir, dass es eine kreisförmige Referenz ist, was richtig ist.
Leider kann ich die Objekte nicht berühren, da sie in einer referenzierten DLL von einem anderen Projekt sind - sonst würde ich sie ändern.

Gibt es eine Möglichkeit, als Json zu serialisieren und die kreisförmigen Eigenschaften zu ignorieren?

+1

Sie können versuchen, [JSon.NET] (http://james.newtonking.com/projects/json-net.aspx), das Zirkelverweise unterstützt. –

+2

Wenn Sie Zirkelverweise ignorieren möchten, sollten Sie 'ReferenceLoopHandling.Ignore' einstellen (siehe: http://james.newtonking.com/projects/json/help/html/T_Newtonsoft_Json_ReferenceLoopHandling.htm) – oakio

Antwort

5

Verwenden Sie die Newtonsoft.Json (die Standardeinstellung .net json Serializer ist) und stellen

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

Sie können auch global diese Variable definieren, wenn Sie MVC-Anwendungen entwickeln ...

+0

Obwohl es eine häufig verwendete Serialisierungsbibliothek ist (aus guten Gründen) ist es nicht der Standard. Microsoft hat 2 JSON-Serialisierer, die Sie ebenfalls verwenden können. – Aidiakapi

+0

In WCF-Projekten ist der Standard DataContractJsonSerializer. –

+0

MS verwendet tatsächlich mehrere Serialisierer. Newtonsoft wird in der Web-API, aber nicht auf älteren Controllern verwendet. – Robert

Verwandte Themen