首页 > 解决方案 > 一次反序列化json一条记录

问题描述

我正在处理大型 json 文件,内存是一个问题。我想从文件中一次将一个对象读入内存。这可能吗?

在 ServiceStack.Text 文档中,它说有一个使用阅读器/流的 API

在此处输入图像描述

但我看不出如何让它发挥作用。文件太大,无法一次性反序列化。SS可以处理这种情况吗?

谢谢

标签: servicestack

解决方案


不,您需要使用像System.Text.Json Utf8JsonReader这样的流式 JSON 解析器,这是System.Text.Json 介绍页面上的示例:

byte[] data = Encoding.UTF8.GetBytes(json);
Utf8JsonReader reader = new Utf8JsonReader(data, isFinalBlock: true, state: default);

while (reader.Read())
{
    Console.Write(reader.TokenType);

    switch (reader.TokenType)
    {
        case JsonTokenType.PropertyName:
        case JsonTokenType.String:
        {
            string text = reader.GetString();
            Console.Write(" ");
            Console.Write(text);
            break;
        }

        case JsonTokenType.Number:
        {
            int value = reader.GetInt32();
            Console.Write(" ");
            Console.Write(value);
            break;
        }

        // Other token types elided for brevity
    }

    Console.WriteLine();
}

推荐阅读