2017-05-07 12 views
2

我有一个JArray与对象有两个属性。例如:如何将JArray转换为C#中的KeyValuePair结构?

[ 
    {"Prop1":"key1", "Prop2":"value1"}, 
    {"Prop1":"key2", "Prop2":"value2"}, 
    {"Prop1":"key3", "Prop2":"value3"} 
] 

,我需要KeyValuePair(或字典无所谓)结构在C#诸如

PROP1和PROP2的
key1-value1 
key2-value2 
key3-value3 

名称也可以改变,这意味着JArray可以有不同的道具名称,但对象中的属性数量总是2.所以我需要将JArray反序列化为List<KeyValuePair>的一般方法。

回答

1

鉴于JArray类型的变量array,你可以做从System.Linq命名空间下使用extension方法:

var pairs = array 
    // Cast array items from JToken to JObject. 
    // You could filter instead using `OfType<JObject>() if nulls might be present 
    .Cast<JObject>() 
    // Convert the first and second property values to a KeyValuePair 
    .Select(o => new KeyValuePair<string, string>((string)o.PropertyValues().ElementAtOrDefault(0), 
                (string)o.PropertyValues().ElementAtOrDefault(1))) 
    .ToList(); 

var dict = pairs.ToDictionary(p => p.Key, p => p.Value); 

样品fiddle