ich ohne Glück versuchen Objektgraph mit Kreis Bezug auf deserialisieren,Json.net deserialisieren json mit zirkulärem Verweise in MVC4
Json.net gut funktioniert, wenn zirkuläre Referenzen Serialisierung: ein $ id Objekte Hinzufügen und Austausch von Objekten with $ ref = * objectId, Wenn ich dieselben Daten zurück an die MVC-Aktion sende, wird die Deserialisierung nicht korrekt durchgeführt - die $ refs werden durch leere Objekte ersetzt.
Ich benutze json.net sowohl serialize und entserialisieren Deserialisieren wird in einem benutzerdefinierten IValueProvider implementiert - https://json.codeplex.com/discussions/347099
Ich bemerkte, dass, wenn auf ein anonymes Objekt Deserialisieren
JsonConverter.Deserialize(json);
es wird nicht mit dem Deal kreisförmige Referenzen. aber bei der Verwendung eines generischen Typs Deserialisieren
JsonConverter.Deserialize<EntityType>(json)
wird es richtig deserialisieren.
Aber ich kann nicht die Art in der GetValueProvider (Controllercontroller)
jede Hilfe
Bearbeiten- In meinem aktuellen fix ich die ganze json als String übergeben und verwenden
geschätzt wird findenJsonConverter.Deserialize<EntityType>(json)
mit der richtigen Art in der Klage des Controller, aber das ist definitiv nicht der richtige Weg, um mit json + mvc4 zu arbeiten ... ich brauche einen besseren Weg, es in Mvc zu integrieren, begann eine bo unty
Bearbeiten- mehr Code vom Typ:
[JsonObject(IsReference = true)]
public class DynamicEntity : EntityWithID<Guid>
{
....
public virtual IList<DynamicEntity> ReferenceFields { get; set; }
}
Die json deserialisieren ist der Ausgang der Serialisieren Methode der Json.net.
{"$id":"1","ReferenceFields":[{"$ref":"1"}],"Id":"9f9de7f3-865e-4511-aeac-a2ff01193b06"}
Das Problem ist die Integration mit MVC, weil die json hin und her zwischen dem Server und dem Client geht. Ich habe bereits js Methoden es exakt das gleiche Format hin und her zu wechseln - getestet, wie ich es so für jetzt verwenden:
public ActionResult EntitySaveOrUpdate(string entity)
{
var entityToSave = JsonConvert.DeserializeObject<DynamicEntity>(entity);
...
}
Und es funktioniert gut, aber ich brauche eine bessere Integration mit MVC und nicht in allen meinen Aktionen deserialisieren ...
Soweit ich gelernt habe, sind zirkuläre Referenzen schlecht und werden unerwartetes Verhalten ergeben, aber vielleicht verstehe ich die Frage nicht. Müssen in den Code beim Senden der Daten zurück zu mvc, um zu sehen, was es vor Deserialisierung ist –
Die Daten sind in Ordnung, in der benutzerdefinierten ValueProvider in MVC (Link in der Frage) gibt es eine Deserialize, Json.Net's Deserialize funktioniert nur gut, wenn übergeben Sie ihm den eigentlichen Typ - den ich nicht im controllerContext finden kann. wie zirkuläre Referenzen - mit inversen Beziehungen können Sie sie nicht vermeiden. –
können Sie einige der JSON ausgeben, so dass wir das Format von ihm und den zirkulären Datensatz sehen können. Kannst du auch den Code für einen 'EntityType' anzeigen, zu dem es deserialisieren würde? – Haney