ich ein Stück von JSON, die wie folgt aussieht:Wie Newtonsoft Json.NET Verweise auf deserialisieren zu trennen, einzelne Instanzen
[
{
"$id": "1",
"Name": "James",
"BirthDate": "1983-03-08T00:00Z",
"LastModified": "2012-03-21T05:40Z"
},
{
"$ref": "1"
}
]
Wie Sie durch die $ ref sagen kann, das JSON-Array enthält die gleiche Person (James), zweimal. Das zweite Mal ist ein Verweis auf das erste Mal.
Ich frage mich, ob es eine Möglichkeit zu deserialize diese JSON in ein Objekt ist, das des James Person zwei Kopien enthält.
Derzeit bin ich mit diesem:
var jsonSerializerSettings = new JsonSerializerSettings()
{
PreserveReferencesHandling = PreserveReferencesHandling.None,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
var deserializedPersons = JsonConvert.DeserializeObject<List<Person>>(json, jsonSerializerSettings);
Aber das gibt mir nur ein Array mit der gleichen Instanz der Person, zweimal:
object.ReferenceEquals(deserializedPersons[0], deserializedPersons[1]) // Evaluates to true
ich eine Abhilfe gefunden habe ich bin unglücklich mit dem ist einfach die JSON-Zeichenfolge deserialisieren, dann Serialisierung es mit den obigen jsonSerializerSettings, die die Person in der JSON duplizieren, dann deserialisieren wieder. Dies verursacht große Verlangsamungen für die großen Objekte, die wir verwenden.
Hinweis: Ich weiß, ich könnte die API ändern, dass ich diesen JSON abrufen aus, die Daten zu duplizieren, aber den Verweises Erhaltung spart erheblichen Raum, wenn die Antwort JSON über den Draht zu senden.
IF * verlangsamen * ist die WIRKLICHE Frage, verwenden Sie einfach [JSONFAST] (http://www.codeproject.com/Articles/159450/fastJSON) es ist doppelt so schnell wie James Newton-Kings-Implementierung. –
Wäre es geeignet, über Ihre Personenliste zu iterieren und jede Person nach der Deserialisierung zu klonen? – recursive
Ah, ich habe es falsch gelesen - ich dachte, er versuchte, die Refs loszuwerden – Plutonix