Ich weiß, dass sind Tonnen von Fragen zu diesem Thema in ganz SO aber keiner von ihnen löste mein Problem.Circular Reference beim Serialisieren EF-Modell zu JSON
Ich verwende MVC 5 mit Entity Framework 6 und Newtonsoft.Json.
Ich habe das übliche Szenario für diese Ausnahme:
Service => Staff => Service
Wenn ich versuche, ein service
Objekt meiner Ansicht zu serialisiert, wie folgt aus:
var arr = @Html.Raw(@JsonConvert.SerializeObject(Model.Services));
Ich erhalte die „circular reference was detected while serializing an object of type...
“ Ausnahme.
Alle Antworten, die ich hier sagen, dass es wasy zu lösen ist, sollte ich nur
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings
.PreserveReferencesHandling = PreserveReferencesHandling.All;
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings
.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
in meiner Global.asax
Datei hinzufügen.
Nun, ich tat es, und es funktioniert einfach nicht. Ich lese eine Reihe von Artikeln auf MSDN und sie alle sagen das Gleiche. Ich weiß nicht warum, aber es funktioniert einfach nicht für mich.
Der einzige Weg, ich konnte es funktioniert, war die ganze Serialisierungskontext in meinem Controller zu erstellen:
var settings = new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.All,
ReferenceLoopHandling = ReferenceLoopHandling.Serialize
};
var serializer = JsonSerializer.Create(settings);
var msmStream = new MemoryStream();
var txtWriter = new StreamWriter(msmStream);
var writer = new JsonTextWriter(txtWriter) { Formatting = Formatting.Indented };
serializer.Serialize(writer, services);
var json = Encoding.ASCII.GetString(msmStream.GetBuffer());
Dies ist jedoch eine schreckliche schreckliche Lösung ist, besonders, wenn ich von der Unterkunft bin Serialisierung meines Modell in der Ansicht in Echtzeit anzeigen. Es vereitelt auch den ganzen Zweck einer "globalen Konfiguration".
Hat jemand dieses Problem konfrontiert?
Können Sie Ihren JSON zeigen? – Kamo