Десериализация json по одной записи за раз - PullRequest
0 голосов
/ 08 января 2020

Я работаю с большими json файлами, и память вызывает беспокойство. Я хотел бы прочитать один объект в память за раз из файла. Возможно ли это?

В документах ServiceStack.Text говорится, что есть API, использующий ридер / поток

enter image description here

Но я могу ' не вижу, как заставить это работать. Файлы слишком велики для десериализации за один go. Можно ли справиться с этим сценарием с помощью SS?

Спасибо

1 Ответ

2 голосов
/ 08 января 2020

Нет, вы захотите использовать потоковый JSON парсер, такой как System.Text. Json Utf8JsonReader , это пример на 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();
}
...