我想高效地反序列化JSON对象,它包含JSON对象的嵌套数组。
例如,JSON目录列表可以包含一个根JSON文件系统对象,该对象具有文件系统对象的递归数组。
{
"bytes": 0,
"path": "/Public",
"is_dir": true,
"contents": [
{
"bytes": 0,
"modified": "Mon, 18 Jul 2011 20:13:43 +0000",
"path": "/Public/1.txt",
"is_dir": false
},
{
"bytes": 0,
"modified": "Mon, 18 Jul 2011 20:13:43 +0000",
"path": "/Public/2.txt",
"is_dir": false
}
]
}
相应的C#类如下所示
class JsonFileInfo
{
public string Path;
public long Bytes;
public string Modified;
public bool IsDir;
public List<JsonFileInfo> Contents;
}
我已经试过.NET DataContractJsonSerializer了。
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(RainstormFileInfo));
JsonFileInfo jfi = (JsonFileInfo)serializer.ReadObject(responseStream);
我也尝试过JSON.NET JsonSerializer + JsonTextReader。
JsonReader reader = new JsonTextReader(new StreamReader(responseStream))
JsonSerializer serializer = new JsonSerializer();
JsonFileInfo jfi = serializer.Deserialize<JsonFileInfo>(reader);
但是这两个框架在反序列化的一举中将整个contents
JSON子数组读入内存。
如何从流中一次读取一个JsonFileInfo对象的JSON结果?
发布于 2014-11-11 16:35:36
现在有一个库可以完全满足您的需求。它将一次读取一个字节的JSON并返回结果。完整的描述和用法示例here。
它可能会让你避免重复发明轮子。
从本质上讲,这个库允许您解析完整的JSON对象,或者面向嵌套对象。无论是哪种情况,它都是一种非常有效的解析JSON的方法,而且比JSON.NET更快。
https://stackoverflow.com/questions/14442885
复制相似问题