Прогресс при десериализации JSON

json.net progress

341 просмотра

1 ответ

31870 Репутация автора

Я десериализирую огромный JSON (1,4 ГБ) через поток, потому что я не хочу загружать весь контент в память заранее только для разбора. Это работает нормально, но занимает ~ 80 секунд, поэтому я хочу показать прогресс.

public JObject DeserializeViaStream(string filename)
{
    object obj;
    var serializer = new JsonSerializer();
    using (var sr = new StreamReader(new FileStream(filename, FileMode.Open)))
    {
        using (var jsonTextReader = new JsonTextReader(sr))
        {
            obj = serializer.Deserialize(jsonTextReader);
        }
    }
    return (JObject) obj;
}

Я еще не пробовал, но только одну идею: я мог бы реализовать свой собственный потоковый считыватель, который отслеживает считываемые байты и сравнивает их с длиной файла.

Есть ли встроенная опция или более простой способ сделать это?

Автор: Thomas Weller Источник Размещён: 18.07.2016 08:11

Ответы (1)


2 плюса

31870 Репутация автора

Решение

Я закончил тем, что использовал свою идею. К счастью , Мел Грин уже предлагает ProgressStream .

Автор: Thomas Weller Размещён: 06.07.2017 09:14
Вопросы из категории :
32x32