使用Json.NET将JObject的一部分转换为Dictionary<string, string>

4

我正在测试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);

来源于这里,但我想知道是否可能将其缩短为一行。 我尝试了

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

但是在这种情况下,pair不再是KeyValuePair而是JToken,所以它不能起作用。有人能帮我解决吗?

1个回答

4
您可以使用这行代码。
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());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接