C# json数组c上的foreach循环#

C# json数组c上的foreach循环#,c#,json,exception,json.net,C#,Json,Exception,Json.net,我在一个foreach循环中出错,我不明白为什么。 你能帮我吗 这是我的一个小项目 json: c#: 错误: $exception{“'Newtonsoft.Json.Linq.JProperty'不包含任何“快捷方式”的定义”}Microsoft.CSharp.RuntimeBinder.RuntimeBinderException 在JSON中,按钮不是数组;它是一个物体。因此,您的foreach循环实际上正在迭代按钮对象的属性,其中第一个(也是唯一一个)属性是button1快捷方式位于按

我在一个
foreach
循环中出错,我不明白为什么。 你能帮我吗

这是我的一个小项目

json:

c#:

错误:

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


在JSON中,
按钮
不是数组;它是一个物体。因此,您的
foreach
循环实际上正在迭代
按钮
对象的属性,其中第一个(也是唯一一个)属性是
button1
<代码>快捷方式位于
按钮1
对象内;它不直接位于
按钮
内,因此您会收到错误。由于
实际上是一个隐藏项,因此需要使用
访问器进入
快捷方式

试着这样做:

kc[i] = (Keys)Enum.Parse(typeof(Keys), (string)item.Value.shortcut);
还请注意,
kc
数组的大小可能不够大:您正在为
设置短切使用一个额外的元素。因此,您可能需要添加一个来说明这一点


Fiddle:

按钮定义为对象,而不是列表。所以您是在迭代属性,而不是元素。我想它应该与
{…,“buttons”:[{“name”:“test”,“type”:“,“path”:“,“shortcut”:“E”,“iconPath”:“}]}
(其中“…”是您在“buttons”之前的内容)为什么要使用这样的代码而不是例如,创建一个强类型对象并将JSON字符串直接反序列化到它?@Fildor no,那现在只是一个无效数组。@Jamiec Oh,对了。让我来解决这个问题。。。完成
public Keys[] kc;

dynamic mylist = JsonConvert.DeserializeObject(fileText);
kc = new Keys[buttonByColumn * buttonByLine];
kc[0] = (Keys)Enum.Parse(typeof(Keys), (string)mylist.settingsshortcut);

int i = 1;
foreach (dynamic item in mylist.buttons)
{
    kc[i] = (Keys)Enum.Parse(typeof(Keys), (string)item.shortcut);//error is here
    i++;
}
kc[i] = (Keys)Enum.Parse(typeof(Keys), (string)item.Value.shortcut);