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);