2017-05-07 812 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