2016-07-18 6 views
3

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

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

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

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

+0

Вы в конечном итоге придумали решение? – user2441511

+1

@ user2441511: см. Мой ответ ниже. Работает ProgressStream. –

ответ