一次反序列化 json 一条记录

Deserialize json one record at a time

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

在 ServiceStack.Text 文档中说有一个 API 使用 reader/stream

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

谢谢

不,您需要使用流式 JSON 解析器,例如 System.Text.Json Utf8JsonReader, this is the example on System.Text.Json introductory page:

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();
}