C# 使用Json.NET将JObject的一部分转换为Dictionary<;字符串,字符串>;
我正在测试Json.Net,为另一个项目做准备,但遇到了一些麻烦。我要做的是将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',
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());