Heim >Backend-Entwicklung >C++ >Wie deserialisiere ich einen Stream von JSON-Objekten mit JSON.NET?
Deserialisieren eines Streams von JSON-Objekten mit JSON.NET
In vielen Szenarien kommen JSON-Daten als Stream einzelner Objekte ohne Trennung vor . Dies stellt eine Herausforderung dar, wenn JSON.NET verwendet wird, um solche Daten in ein IEnumerable
Anfänglicher Ansatz und Fehler
Versuch, den Stream mithilfe des Folgenden zu deserialisieren Code führt zu einem Fehler:
var serializer = new JsonSerializer(); serializer.CheckAdditionalContent = false; using (var reader = new StreamReader(stream)) using (var jsonReader = new JsonTextReader(reader)) { reader.SupportMultipleContent = true; reader.Read(); while (reader.TokenType != JsonToken.None) { yield return serializer.Deserialize<TResult>(reader); } }
Der Fehler weist auf ein unerwartetes Ende des Objekts danach hin Deserialisierung eines Objekts:
Newtonsoft.Json.JsonSerializationException: Unexpected token while deserializing object: EndObject. Path '', line 1, position 55.
Lösung: Erweiterte Reader-Verwaltung
Um dieses Problem zu beheben, ist es notwendig, den JSON-Reader nach jeder erfolgreichen Deserialisierung manuell voranzutreiben. Die korrigierte Schleifenstruktur lautet wie folgt:
public IEnumerable<TResult> ReadJson<TResult>(Stream stream) { var serializer = new JsonSerializer(); using (var reader = new StreamReader(stream)) using (var jsonReader = new JsonTextReader(reader)) { jsonReader.SupportMultipleContent = true; while (jsonReader.Read()) { yield return serializer.Deserialize<TResult>(jsonReader); } } }
Verwendung und Überlegungen
Um diese Methode zu verwenden, stellen Sie einen offenen Stream bereit, der die JSON-Objekte enthält. Es ist wichtig, über das resultierende IEnumerable
Zum Beispiel:
using (var stream = /* some stream */) { IEnumerable<MyClass> result = ReadJson<MyClass>(stream); foreach (var item in result) { Console.WriteLine(item.MyProperty); } }
Dieses Beispiel enthält auch einen Link zu einer Demonstration auf der JSON.NET-Website und ein Funktionsbeispiel auf DotNet Fiddle.
Das obige ist der detaillierte Inhalt vonWie deserialisiere ich einen Stream von JSON-Objekten mit JSON.NET?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!