gpt4 book ai didi

c# - 如何使用 JSON.NET 解析递归数据结构?

转载 作者:行者123 更新时间:2023-11-30 12:31:00 28 4
gpt4 key购买 nike

我有 MENUITEMSCREEN在根元素中定义的条目 MENUSTRUCT来自 json 字符串。

这里重要的是 MENUITEM可以包含其他 MENUITEM s 或 SCREEN

我想用 JSON.NET 解析整个 json 字符串,我应该在其中收到一个带有 MENUITEM 的树可以包含一个巨大的嵌套链 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

我还尝试用 JObject 解析树但我认为这种方式你需要自己实现大量的解析。

JObject obj = JObject.Parse(json);   
var menuItems = from m in obj["MENUSTRUCT"]["MENUITEM"].Children() select m;
List<MenuEntry> menues = this.LoadMenuStructure(menuItems);

在这里我必须确保我在正确的 JToken 上但我不知道我是否正在处理 MenuItemScreen .

有没有其他更简单的方法来反序列化 json 字符串而不用嵌套所有结构?

预先感谢您的帮助。

最佳答案

您的原始脚本中有错误,并且底部有一个额外的空白 ,。我也删除了 C# // Comments 标签,这现在应该对你有用了

{
"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 The JSON Validator

关于c# - 如何使用 JSON.NET 解析递归数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14774292/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com