Ole*_* Sh 2 parsing json json.net
我有以下代码:
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>())
没有工作。
至少可以说,这个 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此处用于展平列表列表。