使用“随机”键反序列化 JSON

2024-01-01

我正在尝试反序列化此 Json 代码:

"hotkeyOptions": {
        "autoSwitchHotkeyPreset": true,
        "currentHotkeySetName": "Paladin",
        "hotkeySets": {
            "Newbie": {
                "F10": {
                    "useObject": 5645,
                    "useType": "SelectUseTarget"
                },
                "F11": {
                    "useObject": 5456,
                    "useType": "SelectUseTarget"
                },
                "F12": {
                    "useObject": 7565,
                    "useType": "Use"
                },
                "F8": {
                    "useObject": 7547,
                    "useType": "UseOnYourself"
                },
                "F9": {
                    "useObject": 4214,
                    "useType": "SelectUseTarget"
                }
            },
            "Mega Mage": {
                "Ctrl+F1": {
                    "chatText": "heal friend",
                    "sendAutomatically": true
                },
                "Ctrl+F4": {
                    "chatText": "mega haste",
                    "sendAutomatically": true
                },
                "F1": {
                    "chatText": "haste",
                    "sendAutomatically": true
                },
                "F10": {
                    "useObject": 3412,
                    "useType": "SelectUseTarget"
                },
                "F11": {
                    "useObject": 5343,
                    "useType": "SelectUseTarget"
                },
            },
            "Paladin": {
                "F1": {
                    "useObject": 4643,
                    "useType": "UseOnYourself"
                },
                "F2": {
                    "useObject": 6433,
                    "useType": "UseOnYourself"
                },
                "F3": {
                    "chatText": "haste",
                    "sendAutomatically": true
                },
                "F5": {
                    "chatText": "heal",
                    "sendAutomatically": true
                }
            },
            "Mage": {
                "F1": {
                    "chatText": "explosion",
                    "sendAutomatically": true
                },
                "F12": {
                    "useObject": 3003,
                    "useType": "SelectUseTarget"
                }
            },
            "Knight": {
                "Ctrl+F1": {
                    "chatText": "poke go",
                    "sendAutomatically": true
                },
                "F1": {
                    "chatText": "haste",
                    "sendAutomatically": true
                },
            }
        }
    }

我在尝试读取它们的属性和值时遇到问题,但我无法获取“Newbie”、“Mega Mage”、“Paladin”等名称属性。

这就是我现在得到的:

JToken token = JObject.Parse(json);
JToken hotkeyConfig = token.SelectToken("hotkeyOptions");

JToken activeHotkey = hotkeyConfig.SelectToken("currentHotkeySetName");
this.ActiveHotkeySet = activeHotkey.Value<string>(); //This is working, returning the "Paladin" string

JToken hotkeysSet = hotkeyConfig.SelectToken("hotkeySets");
foreach (var set in hotkeysSet.Children()) {
    foreach (JObject obj in set.Children<JObject>()) {
        foreach(JProperty prop in obj.Properties()) {
            var teste = prop.Name;
        }
    }
}

通过上面的代码,我可以使用“F10”、“Ctrl+F1”等键盘快捷键,但无法获取“家长姓名”(新手)。

有没有一种简单的方法来读取这种JSON结构?


您可以使用牛顿软件。大多数情况下,我更喜欢解析 json 而不是类。解决您的问题的示例:

首先定义反序列化的类:

public class Hotkeys
{
    [JsonProperty("hotkeyOptions")]
    public HotkeyOptions HotkeyOptions { get; set; }
}

public class HotkeyOptions
{
    [JsonProperty("autoSwitchHotkeyPreset")]
    public bool AutoSwitchHotkeyPreset { get; set; }

    [JsonProperty("currentHotkeySetName")]
    public string CurrentHotkeySetName { get; set; }

    [JsonProperty("hotkeySets")]
    public Dictionary<string, JObject> HotkeySets { get; set; }
}

然后你可以这样读:

var hotkeys = JsonConvert.DeserializeObject<Hotkeys>(json);

foreach(var hotkeySet in hotkeys.HotkeyOptions.HotkeySets)
{
    string hotkeySetName = hotkeySet.Key; // "Newbie" etc..
    foreach(var hotkey in hotkeySet.Value)
    {
        string hotkeyString = hotkey.Key; // "F10" etc..
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用“随机”键反序列化 JSON 的相关文章

随机推荐

  • Xamarin Forms 和 EntityFramework 属性兼容性

    我有一个客户端 服务器解决方案 using C WPF ASP NET WebAPI and Entity Framework 客户端和服务器类分享模型在他的项目中 现在我正在尝试使用 Xamarin Forms 创建一个新客户端并将模型共
  • 无法运行 import tensorflow as tf

    我使用以下命令安装了tensorflow pip install tensorflow 我正在运行一个简单的程序 import tensorflow as tf node1 tf constant 3 0 tf float32 node2
  • 我可以重载 Groovy 中的隐式类型转换吗?

    说我有一个函数 def method1 MyClass2 mc2 我用一个类型的对象来调用它MyClass1 有没有一种方法可以指定如何隐式转换MyClass1 to MyClass2 这样方法调用就可以工作 而不必明确地说method1
  • 通过 LDAP 对当前 Windows 用户的凭据进行身份验证?

    我们有一个使用 WAMP W 代表 Windows P 代表 PHP 的 Windows 桌面内联网上托管的应用程序 我们需要实现一项新功能 每当用户访问我们的 Intranet 站点时 通过使用他 她的 Windows 登录凭据来验证用户
  • 使用表类将类添加到 codeigniter 中的特定行

    如何使用表类将类添加到 codeigniter 中的特定行 您不能像向 CI 样式的其他元素添加额外属性那样向行添加类 但是 您可以连续向每个 td 添加一个类 然后在该类引用整行时对该类进行操作 td1 array data gt act
  • 使用 selenium 和 python 进行网页抓取 - 包含文本的 xpath

    我会尽力让它变得很短 我正在尝试单击通过网站搜索得出的产品 基本上有一个匹配产品的列表 我想单击第一个包含我在标题中搜索的产品名称的产品 我将发布该网站的链接 以便您可以检查其 DOM 结构 在这种情况下 许多都包含我的查询字符串 我只想单
  • toString() 是否定义为返回 java.lang.String ?

    Consider String foo s toString 对于一个非null java lang String实例s 这是定义为返回自身 还是取决于特定的 Java 实现 出于兴趣 是否进行了 深层复制 检查我的 JDK 源代码证实了这
  • 计算图像中某个区域的平均颜色

    目标是在图像顶部放置标题 并将文本颜色设置为与其所在背景形成对比的颜色 为此 我希望计算下图中红色矩形内区域的平均颜色 扩展于邦佐的回答 a 10831158 这是一个示例命令 convert Y82IirS jpg resize 1x1
  • Android 自定义 ActionBar 与搜索视图

    我在我的 Android 应用程序中使用自定义 ActionBar 库 我想显示一个 searchView 但找不到任何解决方案 我正在图书馆工作 https github com johannilsson android actionba
  • IDisposable 对象的依赖注入和生命周期

    我正在尝试使用依赖注入方法 使用 Ninject 开发一个库 并且我可能由于我的设计不正确而感到某种困惑 综上所述 我的设计思路是 A parent对象有一个common object A parent对象使用一些可变数量的child对象
  • 框架比较和开销

    我正在开发一款使用 Zend 框架开发的 Facebook 游戏 现在我没有太多的流量 并且已经看到相当多的数据使用 CPU 时间 其实我不太擅长Zend 我擅长从头开始编写 PHP 和 JS 代码 所以 我很好奇Zend框架的性能 因为我
  • 如何使用 linq toEntity 读取 UTF 8 编码的字符串

    我正在尝试阅读石灰调查 http www limesurvey org 使用 Linq to 实体的表 我的问题是 LimeSurvey 以 UTF8 存储字符串 而 Net 不喜欢它 那么 我有一个简单的函数来列出我的所有调查 我如何告诉
  • Matlab中如何获取直方图数据

    众所周知 Matlab 中的 hist 函数绘制数组的直方图 我需要知道每个垃圾箱的数值 请问你能帮帮我吗 thanks 指定输出hist http www mathworks com access helpdesk help techdo
  • 如何通过flask.Blueprint.route装饰器传递类的自身?

    我正在使用 Flask 和 Python 2 7 编写网站的后端 但遇到了一些问题 我喜欢使用类来封装我的函数 它使我的事情变得整洁并帮助我保持一切模块化 不过 我遇到的一个问题是 flask 用于路由的装饰器不保留 self 变量 我使用
  • 普通 JavaScript 中的 jqueryposition()

    我有以下代码行 var newLeftPos span s i position left parseInt span s i css width 10 它在 ie6 及更高版本中工作得很好 但我还需要让它在 ie5 5 中工作 现在我们不
  • 使用 Redux 获取 Widget 树外部的更新状态

    是否可以从 Widget 树之外的 Store 获取最新状态 在 Provider 中 您可以通过像这样调用 Provider 轻松做到这一点 并且如果有任何更改 状态将更新 Provider of
  • 为什么 MSBuild 将 *.XmlSerializers.dll 程序集放在已发布的 Web 应用程序的根文件夹中?

    我有一个构建过程 它采用我的 VS 2008 NET 2 0 ASP NET 项目并使用 MSBuild 构建它 该项目包含 ASPX 文件和一个 Web 服务 并且还连接到另一个 Web 服务 一切似乎都运行良好 除了 MSBuild 将
  • c# xml序列化不写null

    当我序列化一个包含可为 null DateTime 的 C 对象时 有没有办法将 null 值保留在 xml 文件之外 而不是让
  • SFINAE:static_assert 与 std::enable_if

    是否存在以下缺点 建议 句法 template lt typename T gt void f static assert std is same lt T int gt value 而不是 SFINAE 看起来像拐杖 template l
  • 使用“随机”键反序列化 JSON

    我正在尝试反序列化此 Json 代码 hotkeyOptions autoSwitchHotkeyPreset true currentHotkeySetName Paladin hotkeySets Newbie F10 useObjec