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

标签 c# json json.net deserialization

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

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

而且我需要 C# 中的 KeyValuePair(或 Dictionary 无关紧要)结构,例如

key1-value1
key2-value2
key3-value3

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

最佳答案

给定一个 JArray 类型的变量 array,您可以使用 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

关于c# - 如何在 C# 中将 JArray 转换为 KeyValuePair 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43833899/

相关文章:

c# - 从一个数据表构建制表符分隔的文件

c# - NHibernate:传递给 save() 和级联的未初始化代理

c# - 使用Newtonsoft和biding View(MVVM)反序列化JSON

c# - wcf json 网络服务

c# - 如何在 C# designer.cs 代码中使用常量字符串?

c# - 将 jquery json 传递给 asp.net httphandler

ios - 使用 swift 3 解码字符串

java - 创建通用 API post body 请求?

wcf - 如何将 Json.Net 设置为 WCF REST 服务的默认序列化程序

c# - 您可以扩展 JSON.NET 中用于集合的默认 JsonConverter 吗?