反序列化JSON时的进度



我正在通过流反序列化一个巨大的JSON(1.4GB),因为我不想为了解析而提前将整个内容加载到内存中。这很好,但大约需要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;
}

我还没有尝试过,但只有一个想法:我可以实现我自己的流读取器,它可以跟踪正在读取的字节,并将其与文件长度进行比较。

有没有内置的选项或更简单的方法来做到这一点?

我最终使用了我的想法。幸运的是,Mel Green(archive.org)已经提供了ProgressStream。原来的URL已经不可用了。

请注意:

  • 这种方法可能不会永远适用于所有情况和所有库。这是由于Seek()操作提供了随机访问,并且有人可以多次读取该文件
  • 我不能在这里发布源代码,因为它是在不明确的许可证下发布的

相关内容

  • 没有找到相关文章

最新更新