将JObject转换为Collection

时间:2013-09-15 18:01:20

标签: json parsing 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>())

没有工作。

1 个答案:

答案 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来展平列表列表。