2

我有以下代码:

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

没有工作。

4

1 回答 1

4

至少可以说,这个 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此处用于展平列表列表。

于 2013-09-15T21:56:42.647 回答