【问题标题】:Using Json.NET to convert part of a JObject to Dictionary<string, string>使用 Json.NET 将 JObject 的一部分转换为 Dictionary<string, string>
【发布时间】:2016-07-22 00:58:58
【问题描述】:

我正在测试 Json.Net 以准备另一个项目,但遇到了一些麻烦。我想要做的是将moretests 的内容转换为字典。这是我的完整代码:

class Program
{
    static void Main(string[] args)
    {
        string json = @"{
        'test': 'a',
        'test2': 'b',
        'moretests':{
            'test3': 'c',
            'test4': 'd'
            }
        }";

        JObject parsed = JObject.Parse(json);

        IDictionary<string, JToken> results = (JObject)parsed["moretests"];

        Dictionary<string, string> results2 = results.ToDictionary(pair => pair.Key, pair => (string)pair.Value);

        foreach (var i in results.Keys)
        {
            Console.WriteLine($"{i}: {results[i]}");
        }
    }
}

我得到了这两行:

IDictionary<string, JToken> results = (JObject)parsed["moretests"];

Dictionary<string, string> results2 = results.ToDictionary(pair => pair.Key, pair => (string)pair.Value);

来自here,但我想知道是否可以将其缩短为一行。我试过做

Dictionary<string, string> results = (JObject)parsed["moretests"].ToDictionary(pair => pair.Key, pair => pair.Value)

但它不起作用,因为在这种情况下,pair 不再是 KeyValuePair,而是 JToken。谁能帮帮我?

【问题讨论】:

    标签: c# .net json json.net


    【解决方案1】:

    你可以用这条线

    Dictionary<string, string> results = ((IDictionary<string, JToken>)(JObject)parsed["moretests"]).ToDictionary(pair => pair.Key, pair => (string)pair.Value);
    

    您可能希望避免这样做,这确实会损害可读性。

    编辑

    我搞砸了一段时间,得到了这个更干净的版本。

    Dictionary<string, string> results = JsonConvert.DeserializeObject<Dictionary<string, string>>(parsed["moretests"].ToString());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 1970-01-01
      • 2010-10-17
      • 2014-10-22
      • 1970-01-01
      相关资源
      最近更新 更多