我有以下代码:
JToken hours = jToken["hours"];
它返回以下JSON:
{
"monday": [
["11:00", "21:30"]
],
"tuesday": [
["11:00", "21:30"]
],
"wednesday": [
["11:00", "21:30"]
],
"thursday": [
["11:00", "21:30"]
],
"friday": [
["11:00", "2:00"]
],
"saturday": [
["11:00", "2:00"]
],
"sunday": [
["11:00", "21:30"]
]
}
我需要将其解析为类似
的类型集合<string, string>
或选择任何一天的值,如
hours.Where(p=>p["monday"].Value<string>())
我试过了:
IList<JToken> a = hours.Children().ToList();
var a = JsonConvert.DeserializeObject<Pair<string, string>>(hours.Value<string>());
var a = hours["monday"];
hours.Where(p=>p["monday"].Value<string>())
没有工作。
答案 0 :(得分:2)
这个JSON很奇怪,至少可以说。它包含列表中的小时数。可能的原因之一是当天可以包含多个小时列表。您应该将此问题指向您拥有的JSON的来源。
无论如何,正确的集合类型是:
using HoursCollection = Dictionary<string, List<List<string>>>;
您可以使用以下命令将字符串转换为此集合:
var a = JsonConvert.DeserializeObject<HoursCollection>(hours.ToString());
但是,更好的想法是使用您已经拥有的JObject
:
var a = hours.ToObject<HoursCollection>();
你可以通过这种方式从这个系列中获得星期一的营业时间:
var h = a["monday"].SelectMany(i => i);
此处使用 SelectMany
来展平列表列表。