Heim > Backend-Entwicklung > C++ > Wie deserialisiere ich einen Stream von JSON-Objekten mit JSON.NET?

Wie deserialisiere ich einen Stream von JSON-Objekten mit JSON.NET?

Barbara Streisand
Freigeben: 2025-01-09 21:23:46
Original
980 Leute haben es durchsucht

How to Deserialize a Stream of JSON Objects with 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 zu deserialisieren.

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);
    }
}
Nach dem Login kopieren

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.
Nach dem Login kopieren

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);
        }
    }
}
Nach dem Login kopieren

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 zu iterieren. während der Stream geöffnet bleibt.

Zum Beispiel:

using (var stream = /* some stream */)
{
    IEnumerable<MyClass> result = ReadJson<MyClass>(stream);

    foreach (var item in result)
    {
        Console.WriteLine(item.MyProperty);
    }
}
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage