You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET的System.Text.Json是否有类似Newtonsoft.Json的JsonReader/JsonTextReader?

System.Text.Json 处理超大JSON文件的流读取方案

完全可以,System.Text.Json 提供了 Utf8JsonReader 类型,专门用于以流的方式顺序读取JSON数据,不需要将整个文件加载到内存,完美适配数十GB级的超大JSON文件场景,完全符合你不依赖外部库的需求。

它的设计逻辑和Newtonsoft.Json的JsonReader/JsonTextReader一致,都是通过逐Token读取的方式处理JSON结构,核心用法如下:

示例代码

using var stream = new FileStream("large-file.json", FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096);
var reader = new Utf8JsonReader(stream);

while (reader.Read())
{
    // 根据当前Token类型处理对应逻辑
    switch (reader.TokenType)
    {
        case JsonTokenType.StartObject:
            // 处理对象开始标记
            break;
        case JsonTokenType.PropertyName:
            string propName = reader.GetString();
            // 处理属性名称
            break;
        case JsonTokenType.String:
            string strValue = reader.GetString();
            // 处理字符串类型的属性值
            break;
        case JsonTokenType.Number:
            if (reader.TryGetInt64(out long intValue))
            {
                // 处理整数类型值
            }
            // 也可以根据需求尝试读取其他数值类型
            break;
        case JsonTokenType.EndObject:
            // 处理对象结束标记
            break;
        // 其他Token类型可根据业务需求扩展处理
    }
}

关键说明

  • Utf8JsonReader 是值类型,无需用using包裹,它不会持有Stream资源,资源管理由外层的Stream负责。
  • 直接接收Stream作为输入,无需像Newtonsoft那样包装为StreamReader,因为它直接操作UTF-8字节流,性能更高。
  • 通过Read()方法逐个推进JSON Token,每次仅在内存中保留当前Token的相关数据,内存占用极低。
  • 提供了一系列类型安全的读取方法(如GetString()、TryGetInt64()等),避免类型转换错误。

内容的提问来源于stack exchange,提问作者smk081

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 10:07:06