2013-07-23 5 views
5

devo una struttura oggetto come questo:Come serializzare come Json una struttura di oggetti con riferimenti circolari?

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 
} 

cerco di serializzare proposta come JSON, mi dice che c'è un riferimento circolare, che è corretto.
Purtroppo, non riesco a toccare gli oggetti, poiché sono in una DLL di riferimento da un altro progetto, altrimenti li cambierei.

C'è un modo per serializzare come Json e ignorare le proprietà circolari?

+1

Si può provare [JSon.NET] (http://james.newtonking.com/projects/json-net.aspx) che supporta riferimenti circolari. –

+2

Se si desidera ignorare i riferimenti circolari, è necessario impostare "ReferenceLoopHandling.Ignore' (vedere: http://james.newtonking.com/projects/json/help/html/T_Newtonsoft_Json_ReferenceLoopHandling.htm) – oakio

risposta

5

Utilizzare il Newtonsoft.Json (che è il serializzatore .net JSON default) e impostare

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

è anche possibile definire globalmente questa variabile se si stanno sviluppando applicazioni MVC ...

+0

Anche se è una libreria di serializzazione comunemente usata (per buone ragioni) non è l'impostazione predefinita. Microsoft ha 2 serializzatori JSON che puoi usare anche tu. – Aidiakapi

+0

Nei progetti WCF il valore predefinito è DataContractJsonSerializer. –

+0

MS utilizza effettivamente più serializzatori. Newtonsoft viene utilizzato nell'API Web ma non nei controller precedenti. – Robert