Home > Backend Development > C++ > How to Deserialize a Stream of JSON Objects with JSON.NET?

How to Deserialize a Stream of JSON Objects with JSON.NET?

Barbara Streisand
Release: 2025-01-09 21:23:46
Original
986 people have browsed it

How to Deserialize a Stream of JSON Objects with JSON.NET?

Deserializing a Stream of JSON Objects using JSON.NET

In many scenarios, JSON data comes as a stream of individual objects without any separation. This presents a challenge when using JSON.NET to deserialize such data into an IEnumerable.

Initial Approach and Error

Attempting to deserialize the stream using the following code results in an error:

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);
    }
}
Copy after login

The error indicates an unexpected end of object after deserializing one object:

Newtonsoft.Json.JsonSerializationException: Unexpected token while deserializing object: EndObject. Path '', line 1, position 55.
Copy after login

Solution: Advanced Reader Handling

To resolve this issue, it is necessary to advance the JSON reader manually after each successful deserialization. The corrected loop structure is as follows:

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);
        }
    }
}
Copy after login

Usage and Considerations

To use this method, provide an open stream that contains the JSON objects. It is crucial to iterate over the resulting IEnumerable while the stream remains open.

For example:

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

    foreach (var item in result)
    {
        Console.WriteLine(item.MyProperty);
    }
}
Copy after login

This example also includes a link to a demonstration on the JSON.NET website and a functional example on DotNet Fiddle.

The above is the detailed content of How to Deserialize a Stream of JSON Objects with JSON.NET?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template