我有一个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>
的通用方法。
答案 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