JSON文字列のルート要素にエントリが定義されていMENUITEM
ます。SCREEN
MENUSTRUCT
ここで重要なことは、aMENUITEM
に他MENUITEM
の s またはSCREEN
s を含めることができるということです。
ネストされたs またはエントリのMENUITEM
巨大なチェーンを含むことができる s を持つツリーを受け取る必要がある JSON.NET を使用して、json 文字列全体を解析したいと考えています。MENUITEM
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
プロパティを持つオブジェクトがありますが、全体がうまくいきません。デシリアライザーはネストされた s を処理できないと思います。List<Screen>
List<MenuItem>
MenuItem
私もツリーを解析しようとしましJObject
たが、この方法では多くの解析を自分で実装する必要があると思います。
JObject obj = JObject.Parse(json);
var menuItems = from m in obj["MENUSTRUCT"]["MENUITEM"].Children() select m;
List<MenuEntry> menues = this.LoadMenuStructure(menuItems);
ここで、私が正しいことを確認する必要がありますが、 aまたは aJToken
で処理しているかどうかはわかりません。MenuItem
Screen
すべての構造をネストせずにjson文字列を逆シリアル化する簡単な方法は他にありませんか?
よろしくお願いします。