c# - How can I parse recursive data structures with JSON.NET? -
c# - How can I parse recursive data structures with JSON.NET? -
i have menuitem
, screen
entries defined in root element menustruct
json string.
the of import thing here menuitem
can contain other menuitem
s or screen
s.
i want parse whole json string json.net should receive tree menuitem
s can contain huge chain of nested menuitem
s or screen
entries.
i snipped lot of nested structures next json string:
{ "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 next menuitems */ ] // end of menuitem array } }
i tried deserialize whole thing
jsonconvert.deserializeobject<list<menuitem>>(jsonstring);
i have object menuitem
has property of list<screen>
, 1 of list<menuitem>
whole thing doesn't work out. think deserializer not able handle nested menuitem
s.
i tried parse tree jobject
think way need implement lot of parsing yourself.
jobject obj = jobject.parse(json); var menuitems = m in obj["menustruct"]["menuitem"].children() select m; list<menuentry> menues = this.loadmenustructure(menuitems);
here have create sure on right jtoken
have no thought if i'm handling menuitem
or screen
.
is there no other, easier, way deserialize the json string without nesting me through structures?
thanks in advance help.
your original script has errors in , has additional blank ,
towards bottom. removed c# //
comments tags should work
{ "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" } ] } ] } ] } }
jsonlint json validator
c# json json.net
Comments
Post a Comment