我的代碼的一部分以下面的格式將計算機的文件路徑序列化爲JSON。我正在努力接受這個JSON,並重新將文件路徑重新組合在一起。我正在使用Newtonsoft JSON庫;我發現它非常適合構建JSON。正如你所看到的,我的JSON嵌套了對象。如何反序列化未知對象結構的JSON對象
的JSON我有:
{
".": {
"proc": {
"15": {
"task": {
"15": {
"exe": {},
"mounts": {
"list_of_files": [
"mounts.xml"
]
},
"mountinfo": {
"list_of_files": [
"mountinfo.xml"
]
},
"clear_refs": {
"list_of_files": [
"clear_ref.xml"
]
}
}
}
},
"14": {
"loginuid": {
"list_of_files": [
"loginuid.xml"
]
},
"sessionid": {
"list_of_files": [
"sessionid.xml"
]
},
"coredump_filter": {
"list_of_files": [
"coredump_filter.xml"
]
},
"io": {
"list_of_files": [
"io.xml"
]
}
}
}
}
}
數組我想從這個生成。
string[] dirArray = {
"./proc/15/task/15/exe",
"./proc/15/task/15/mounts/mounts.xml",
"./proc/15/task/15/mountinfo/mountinfo.xml",
"./proc/15/task/15/clear_refs/clear_ref.xml",
"./proc/14/loginuid/loginuid.xml",
"./proc/14/sessionid/sessionid.xml",
"./proc/14/coredump_filter/coredump_filter.xml",
"./proc/14/io/io.xml"
}
我的努力,我far--的deserialised JSON成一個動態的變量,但我不知道如何處理兩個問題:
- 我的JSON格式是未知的,我不知道物體有多深,我該如何處理?
- 如何在運行時定義動態變量時使用動態變量?
編輯
對不起,我原來的JSON格式是錯誤的,所以它不會與user12864提供的answer工作。我收到一個錯誤:Unable to cast object of type 'Newtonsoft.Json.Linq.JArray' to type 'Newtonsoft.Json.Linq.JObject'.
這是一個fiddle顯示我到目前爲止的位置。
我可以建議你放棄所有的層次和而只是將每個路徑存儲爲完整的路徑? .NET中的'Path' API應足以確定代碼的層次結構。整個事情會更容易處理,並且由此產生的JSON將更具可讀性。 – mason 2014-11-03 15:39:08
但是,如果我擁有的是json,我需要從中獲得路徑。也許我誤解你的評論? json首先的原因是允許UI消費者以可導航的方式顯示路徑。我現在編寫的代碼是要了解他們選擇保留哪些路徑,UI將編輯json併發送回去,爲了執行某些任務,我需要解構爲路徑。 – Fearghal 2014-11-03 15:39:50
我在說你應該改變你的格式。只要它是一個JSON數組文件,不要以分層的方式存儲它。 – mason 2014-11-03 15:42:06