如何直接从流中反序列化非常大的JSON数据,而不是一次加载整个json

Bed*_*sso 8 c# json json.net

可能重复:
C#中的增量JSON解析

以下问题是相关的,但不解决(至少直接)我正在尝试解决的问题:

我试图使用Json.NET反序列化可能非常大的JSON数据.JObject.Parse(JsonFullString)我希望通过令牌从流令牌中读取并构造对象图,而不是将整个文件加载到内存中并使用解析JSON .我将不胜感激任何关于如何从流实现反序列化的建议.

注意:我的意图是用更好的实现替换以下代码


      string jsonData = string.Empty;
      byte[] buffer = new byte[16 * 1024];
      using (MemoryStream ms = new MemoryStream())
      {
          int read;
          while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
          {
              ms.Write(buffer, 0, read);
          }
          jsonData = ASCIIEncoding.ASCII.GetString(ms.ToArray());
       }                    
       JObject jObject = JObject.Parse(jsonData);
       var entities = from e in jObject.Root
                      select e;

Yav*_*nyP -3

好主意!
我认为你可以做以下事情:

  1. 首先创建对象
  2. 就像您现在所做的那样,按块循环读取流
  3. 在您读取的每个块之前检查它是否包含标记(如果在其中找到逗号“,”)
  4. 如果没有找到逗号 - 读取另一块(在这种情况下可能是一个较小的块?)
  5. 分割逗号前的文本(data.split(":");),并借助反射或硬编码循环,如果不需要支持每个可能的对象,请将值分配给属性
  6. 继续循环。