C# 使用lambda的JObject toDictionary()只提供值,而不提供键

C# 使用lambda的JObject toDictionary()只提供值,而不提供键,c#,json,lambda,json.net,C#,Json,Lambda,Json.net,我试图将JObject中存储的键值对JSON列表转换为C#字典。我差一点就被卡住了 Newtonsoft.Json.Linq.JObject jContainer = new Newtonsoft.Json.Linq.JObject(); Newtonsoft.Json.Linq.JObject jCodes = new Newtonsoft.Json.Linq.JObject(); jCodes.Add("UJ2W", "12345"); jCodes

我试图将JObject中存储的键值对JSON列表转换为C#字典。我差一点就被卡住了

Newtonsoft.Json.Linq.JObject jContainer = new Newtonsoft.Json.Linq.JObject();
Newtonsoft.Json.Linq.JObject jCodes = new Newtonsoft.Json.Linq.JObject();

jCodes.Add("UJ2W", "12345");
jCodes.Add("T62Q", "12346");
jCodes.Add("8I4D", "12347");
jCodes.Add("T45G", "12348");
jCodes.Add("Q91B", "12349");

jContainer.Add("codes", jCodes);
jContainer.Add("company", "Some Company");
jContainer.Add("log", "URL to logo");

Dictionary<string, string> dCodeTranslation = jContainer["codes"]
    .ToDictionary(k => (string)k, v => (string)v);
而不是

UJ2W - 12345
T62Q - 12346
8I4D - 12347
T45G - 12348
Q91B - 12349

将项目强制转换为
JProperty
可使您检索其
名称

var dCodeTranslation = jContainer["codes"].ToDictionary(
    k => { return ((JProperty)k).Name; }, 
    v => { return (string)((JProperty)v).Value; });

//output:
//UJ2W - 12345
//T62Q - 12346
//8I4D - 12347
//T45G - 12348
//Q91B - 12349

但是,您可能需要考虑
ToLookup
,以防每个键都有几个值

非常感谢!这解决了我的问题!在我的情况下,我知道我总是会得到一个值的每一个关键,但谢谢你的建议!
var dCodeTranslation = jContainer["codes"].ToDictionary(
    k => { return ((JProperty)k).Name; }, 
    v => { return (string)((JProperty)v).Value; });

//output:
//UJ2W - 12345
//T62Q - 12346
//8I4D - 12347
//T45G - 12348
//Q91B - 12349