我想有效地反序列化包含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 –
好點。我的意思是儘可能少的內存佔用。這就是爲什麼我不想一次將整個結構讀入內存的原因。 –