可能的重复项:
C# 中的增量 JSON 解析
以下问题是相关的,但没有解决(至少直接)我试图解决的问题:
- 将 JSON 数据流从文本文件加载到对象 C#
- 使用 NewtonSoft 将 JSON 反序列化为 .net 对象(或者 linq to 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;
好
主意!
我认为您可以做的是以下几点:
- 首先创建对象 像
- 现在一样按块循环读取流
- 在您阅读的每个块之前,请检查它是否包含标记(如果在其中找到逗号",")
- 如果未找到逗号 - 读取另一个块(在这种情况下可能是较小的块?
- 拆分前逗号文本 (data.split(":");)在反射或硬编码循环的帮助下,如果您不需要支持每个可能的对象,请将值分配给属性
- 继续循环。