首页 > 后端开发 > C++ > 如何使用 JSON.NET 反序列化 JSON 对象流?

如何使用 JSON.NET 反序列化 JSON 对象流?

Barbara Streisand
发布: 2025-01-09 21:23:46
原创
836 人浏览过

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

使用 JSON.NET 反序列化 JSON 对象流

在许多情况下,JSON 数据作为单个对象的流出现,没有任何分离。当使用 JSON.NET 将此类数据反序列化为 IEnumerable 时,这提出了挑战。

初始方法和错误

尝试使用以下内容反序列化流代码导致错误:

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);
    }
}
登录后复制

错误表示意外结束反序列化一个对象后的对象:

Newtonsoft.Json.JsonSerializationException: Unexpected token while deserializing object: EndObject. Path '', line 1, position 55.
登录后复制

解决方案:高级读取器处理

要解决此问题,需要在每次成功后手动推进 JSON 读取器反序列化。更正后的循环结构如下:

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);
        }
    }
}
登录后复制

使用和注意事项

要使用此方法,请提供包含 JSON 对象的开放流。迭代生成的 IEnumerable 至关重要。

例如:

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

    foreach (var item in result)
    {
        Console.WriteLine(item.MyProperty);
    }
}
登录后复制

此示例还包含 JSON.NET 网站上的演示链接和 DotNet Fiddle 上的功能示例。

以上是如何使用 JSON.NET 反序列化 JSON 对象流?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板