【问题标题】:Convert JObject to Collection将 JObject 转换为集合
【发布时间】:2013-09-19 20:56:37
【问题描述】:

我有以下代码:

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 parsing json.net


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-02
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多