Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Json.NET将JObject的一部分转换为Dictionary<;字符串,字符串>;_C#_.net_Json_Json.net - Fatal编程技术网

C# 使用Json.NET将JObject的一部分转换为Dictionary<;字符串,字符串>;

C# 使用Json.NET将JObject的一部分转换为Dictionary<;字符串,字符串>;,c#,.net,json,json.net,C#,.net,Json,Json.net,我正在测试Json.Net,为另一个项目做准备,但遇到了一些麻烦。我要做的是将moretests的内容转换为字典。以下是我的完整代码: class Program { static void Main(string[] args) { string json = @"{ 'test': 'a', 'test2': 'b', 'moretests':{ 'test3': 'c',

我正在测试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]}");
        }
    }
}
类程序
{
静态void Main(字符串[]参数)
{
字符串json=@”{
‘测试’:‘a’,
“test2”:“b”,
“更多测试”:{
'test3':'c',
“test4”:“d”
}
}";
JObject parsed=JObject.Parse(json);
IDictionary results=(JObject)已解析[“moretests”];
Dictionary results2=results.ToDictionary(pair=>pair.Key,pair=>(string)pair.Value);
foreach(results.Keys中的var i)
{
WriteLine($“{i}:{results[i]}”);
}
}
}
我有两行:

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

Dictionary<string, string> results2 = results.ToDictionary(pair => pair.Key, pair => (string)pair.Value);
IDictionary results=(JObject)已解析[“moretests”];
Dictionary results2=results.ToDictionary(pair=>pair.Key,pair=>(string)pair.Value);
但是我想知道是否可以把它缩短到一行。我试过了

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

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

你可以用这条线

Dictionary<string, string> results = ((IDictionary<string, JToken>)(JObject)parsed["moretests"]).ToDictionary(pair => pair.Key, pair => (string)pair.Value);
Dictionary results=((IDictionary)(JObject)解析[“moretests”]).ToDictionary(pair=>pair.Key,pair=>(string)pair.Value);
不过,您可能希望避免这样做,因为这确实会损害可读性

编辑 我把它弄乱了一段时间,得到了这个更干净的版本

Dictionary<string, string> results = JsonConvert.DeserializeObject<Dictionary<string, string>>(parsed["moretests"].ToString());
Dictionary results=JsonConvert.DeserializeObject(已解析[“moretests”].ToString());