【发布时间】:2017-11-04 21:40:09
【问题描述】:
我对 C# 有点陌生,在解析一些嵌套的 JSON 对象时遇到了一些麻烦。
我正在发出一个返回一些 JSON 的 GET 请求。我已经尽可能地简化了它,使它容易过一遍。 JSON 响应的一个示例是:
{
"response": {
"ITEM1": {
"RANDOM_DATE": {
"mean": 150,
"min": 150,
"max": 150
}
},
"ITEM2": {
"RANDOM_DATE2": {
"mean": 200,
"min": 200,
"max": 200
},
"RANDOM_DATE3": {
"mean": 150,
"min": 150,
"max": 150
}
}
}
}
我目前拥有的是:
dynamic response = JObject.Parse(await client.DownloadStringTaskAsync(url));
foreach (dynamic item in response["response"])
{
string name = item.ToString();
string valueInCentsStr = "0";
int valueInCents = 0;
foreach (dynamic day in response["response"][item])
{
valueString = response["response"][item][day].min;
valueInt = int.Parse(valueString);
}
}
所以现在 item.ToString() 完全没问题。该函数正常运行并返回 ITEM1 和 ITEM2。
问题是,嵌套的对象名称总是不同的,这就是为什么我添加了一个嵌套的 foreach 来遍历每个 ITEM 以获取每天的数据。但是,这似乎不起作用。我得到一个错误指向那个 foreach 说:
System.AggregateException: One or more errors occurred. ---> System.ArgumentException: Accessed JObject values with invalid key value:
我更习惯于 JavaScript,这在 JS 中运行良好。你将如何改变它以便能够从嵌套对象中获取信息?
谢谢。
【问题讨论】:
-
您需要将元素名称传递给响应索引器(就像您使用 `response["response"] 所做的那样),但您传递的是元素本身。除非绝对必要,否则最好避免使用动态和使用编译时类型检查的好处(这里不是)。
-
哦,没看到这个回复,我回去改一下我的其他代码。不知道为什么我要让一切都充满活力。谢谢!