2013-07-23 7 views
5

Mam strukturę obiektu takiego:Jak serializować jako Json strukturę obiektu z odwołaniami cyklicznymi?

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 
} 

staram się szeregować Wniosek jako JSON, to mówi mi, że jest okrągła odniesienia, co jest poprawne.
Niestety, nie mogę dotknąć obiektów, ponieważ znajdują się one w odnośnej bibliotece DLL z innego projektu - w przeciwnym razie będę je zmieniać.

Czy istnieje sposób na serializację jako Json i zignorowanie właściwości okrągłych?

+1

Można spróbować [JSon.NET] (http://james.newtonking.com/projects/json-net.aspx), który obsługuje odwołania kołowe. –

+2

Jeśli chcesz ignorować odwołania kołowe, powinieneś ustawić 'ReferenceLoopHandling.Ignore' (patrz: http://james.newtonking.com/projects/json/help/html/T_Newtonsoft_Json_ReferenceLoopHandling.htm) – oakio

Odpowiedz

5

Użyj Newtonsoft.Json (który jest domyślnym serializer .net json) i ustawić

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

Można również zdefiniować tę zmienną globalnie jeśli tworzenia aplikacji MVC ...

+0

Chociaż jest to powszechnie używana biblioteka serializacji (z ważnych powodów) nie jest to wartość domyślna. Microsoft ma 2 serializatory JSON, z których możesz również korzystać. – Aidiakapi

+0

W projektach WCF wartość domyślna to DataContractJsonSerializer. –

+0

MS rzeczywiście używa wielu serializerów. Newtonsoft jest używany w Web API, ale nie w starszych kontrolerach. – Robert