JSON数组C#上的foreach循环

时间:2019-09-09 14:54:10

标签: c# json exception json.net

我在select allproc.name from sys.procedures allproc outer apply ( select object_name(p.object_id) used_in_procname from syscomments c join sys.procedures p on p.object_id = c.id and p.object_id != allproc.object_id where c.text like concat('%',allproc.name,'%') ) usages where used_in_procname is null 循环中遇到错误,我不明白为什么。 你能帮我吗?

这是给我的一个小项目。

json:

foreach

c#:

{
    "buttonByColumn": 1,
    "buttonByLine": 1,
    "iconSize": 100,
    "settingsbutton": 1,
    "settingsshortcut": "Escape",
    "buttons": {
        "button1": {
            "name": "test",
            "type": "",
            "path": "",
            "shortcut": "E",
            "iconPath": ""
        }
    }
}

错误:

  

$ exception {“'Newtonsoft.Json.Linq.JProperty'不包含对”快捷方式“的任何定义””} Microsoft.CSharp.RuntimeBinder.RuntimeBinderException

1 个答案:

答案 0 :(得分:0)

在您的JSON中,buttons不是数组;它是一个对象。因此,您的foreach循环实际上是在buttons对象的 properties 上进行迭代,该对象的第一个(也是唯一的)属性是button1shortcutbutton1对象内部;它不直接位于buttons内部,因此这就是您遇到错误的原因。由于item实际上是一个JProperty,因此您需要使用Value访问器来访问shortcut

尝试像这样:

kc[i] = (Keys)Enum.Parse(typeof(Keys), (string)item.Value.shortcut);

还要注意,您的kc数组的大小可能不够大:您正在为settingsshortcut使用一个额外的元素。因此,您可能需要为此添加一个帐户。

提琴:https://dotnetfiddle.net/9DZxwc