Ole*_* Sh 2 parsing json json.net
我有以下代码:
JToken hours = jToken["hours"];
Run Code Online (Sandbox Code Playgroud)
它返回以下 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"]
]
}
Run Code Online (Sandbox Code Playgroud)
我需要将其解析为类型化集合,例如
<string, string>
Run Code Online (Sandbox Code Playgroud)
或为任何一天选择一个值,例如
hours.Where(p=>p["monday"].Value<string>())
Run Code Online (Sandbox Code Playgroud)
我试过:
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>())
Run Code Online (Sandbox Code Playgroud)
没有工作。
至少可以说,这个 JSON 很奇怪。它包含列表列表中的小时数。可能的原因之一是一天可以包含多个小时列表。您应该将此问题指向您拥有的 JSON 的来源。
无论如何,正确的集合类型是这样的:
using HoursCollection = Dictionary<string, List<List<string>>>;
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法将字符串转换为该集合:
var a = JsonConvert.DeserializeObject<HoursCollection>(hours.ToString());
Run Code Online (Sandbox Code Playgroud)
但是,更好的主意是使用JObject
您已有的:
var a = hours.ToObject<HoursCollection>();
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式从此集合中获取周一的小时数:
var h = a["monday"].SelectMany(i => i);
Run Code Online (Sandbox Code Playgroud)
SelectMany
此处用于展平列表列表。