如何在C#中将JArray转换为KeyValuePair结构?

时间:2017-05-07 16:30:27

标签: c# json json.net deserialization

我有一个JArray,对象有两个属性。例如:

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

我需要在C#中使用KeyValuePair(或字典并不重要)结构,例如

key1-value1
key2-value2
key3-value3

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

1 个答案:

答案 0 :(得分:2)

给定array类型的变量JArray,您可以使用extension命名空间中的System.Linq方法执行以下操作:

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