我想有效地反序列化包含JSON对象的嵌套数组的JSON对象。如何在C#中使用流读取器有效地反序列化带有嵌套对象的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结果?
当你高效地说你是什么意思?最短的时间?最少的资源?最少的代码行?每个人都可以有不同的解决方案 – RhysW
我认为你必须编写一个定制的de/serializer –
好点。我的意思是尽可能少的内存占用。这就是为什么我不想一次将整个结构读入内存的原因。 –