我在json 字符串的根元素中定义了MENUITEM
和条目。SCREEN
MENUSTRUCT
这里重要的是aMENUITEM
可以包含其他MENUITEM
s或SCREEN
s。
我想用 JSON.NET 解析整个 json 字符串,在那里我应该收到一棵带有MENUITEM
s 的树,它可以包含大量嵌套MENUITEM
的 s 或SCREEN
条目。
我从以下 json 字符串中截取了很多嵌套结构:
{
"MENUSTRUCT": {
"-text": "GUI.Menu.Root",
"-image": "GUI.Menu.Home",
"-mask": "GUI.Menu.Home.Mask",
"-color": "#E0E0FF",
"-menuid": "MENUTREE",
"MENUITEM": [
{
"-text": "GUI.Menu.Text.00000003",
"-image": "GUI.Menu.Menu",
"-mask": "GUI.Menu.Menu.Mask",
"-color": "#C0C0FF",
"-menuid": "Menu.ID.00000003",
"SCREEN": [
{
"-id": "GUI.Dlg.StartupScreen",
"-text": "GUI.Menu.Text.00000103",
"-image": "GUI.Menu.Screen",
"-mask": "GUI.Menu.Screen.Mask",
"-menuid": "Menu.ID.00000103"
},
{
"-id": "GUI.Dlg.Calls",
"-text": "GUI.Menu.Text.Calls",
"-image": "GUI.Menu.Screen",
"-mask": "GUI.Menu.Screen.Mask",
"-menuid": "Menu.ID.00000203"
}
],
"MENUITEM": [
{
"-text": "GUI.Menu.Text.00000603",
"-image": "GUI.Menu.Menu",
"-mask": "GUI.Menu.Menu.Mask",
"-color": "#A0A0FF",
"-menuid": "Menu.ID.00000603",
"SCREEN": [
{
"-id": "GUI.Dlg.SpecialTrips",
"-text": "GUI.Menu.Text.00010603",
"-image": "GUI.Menu.Screen",
"-mask": "GUI.Menu.Screen.Mask",
"-menuid": "Menu.ID.00010603"
},
{
"-id": "GUI.Dlg.SpecialTrips",
"-text": "GUI.Menu.Text.00020603",
"-image": "GUI.Menu.Screen",
"-mask": "GUI.Menu.Screen.Mask",
"-menuid": "Menu.ID.00020603"
}
] // end of screen
}
] // end of nested menuitem
},
/* snipped following menuitems */
] // end of menuitem array
}
}
我试图反序列化整个事情
JsonConvert.DeserializeObject<List<MenuItem>>(jsonString);
我有一个对象MenuItem
,它具有List<Screen>
和 之一的属性,List<MenuItem>
但整个事情都没有解决。我认为反序列化器无法处理嵌套MenuItem
的 s。
我也尝试过解析树,JObject
但我认为这样你需要自己实现很多解析。
JObject obj = JObject.Parse(json);
var menuItems = from m in obj["MENUSTRUCT"]["MENUITEM"].Children() select m;
List<MenuEntry> menues = this.LoadMenuStructure(menuItems);
在这里,我必须确保我是正确的JToken
,但我不知道我是在处理 aMenuItem
还是 a Screen
。
没有其他更简单的方法来反序列化 json 字符串而不将我嵌套在所有结构中吗?
在此先感谢您的帮助。