c# - 在 C# 中反序列化 json 字典数组

标签 c# json json.net

我有一个用 javascript 创建的字典数组。序列化为 json 后,我得到以下字符串:

"[{\"key\":\"60236\",\"value\":\"1\"},{\"key\":\"60235\",\"value\":\"gdsfgdfsg\"},{\"key\":\"60237\",\"value\":\"1\"}]"

我很难将其反序列化为 C# 中的列表或字典。

我试过:

Dictionary<int, string> values = JsonConvert.DeserializeObject<Dictionary<int, string>>(Model.Json);

但这不起作用。

最佳答案

有几种方法可以提取键/值对来构建字典:

var dict = "[{\"key\":\"60236\",\"value\":\"1\"},  
             {\"key\":\"60235\",\"value\":\"gdsfgdfsg\"},
             {\"key\":\"60237\",\"value\":\"1\"}]";

使用 List<KeyValuePair<int, string>>

var dictionary = JsonConvert.DeserializeObject<List<KeyValuePair<int, string>>>(dict)
                                 .ToDictionary(x => x.Key, y => y.Value);

使用代表你的对的自定义对象,然后从你的集合中创建一个字典。

var output = JsonConvert.DeserializeObject<List<Temp>>(dict);
var dictionary = output.ToDictionary(x => x.Key, y => y.Value);

public class Temp
{
    public int Key { get; set; }
    public string Value { get; set; }
}

最后,如果您对仅用于反序列化的自定义“一次性”对象感到不舒服,您可以稍微降低性能并改用动态对象。

var dictionary = JsonConvert.DeserializeObject<List<dynamic>>(dict)
                                 .ToDictionary (x => (int)x.key, y => (string)y.value);

关于c# - 在 C# 中反序列化 json 字典数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30384599/

相关文章:

javascript - 未捕获的 TypeError : Cannot set property 'status' of undefined at HTMLInputElement. 更新数据 JSON Javascript

c# - 在 Web API 中将包含 JToken 的对象序列化为 XML 时出现循环引用异常

c# - 是否可以将 MongoDB 的 "ISODate"字段反序列化为 JToken (C#)?

c# - 如何使用官方 10gen C# 驱动程序设置地理值的序列化选项?

c# - 查找任何具有自定义前缀 HtmlAgilityPack 的互文

java - 忽略来自 Rest API 响应 Java 的空值字段

c# - 如何将解码后的 json 文件中的 bool 值转换为小写字符串?

c# - 在 LINQ 中按平均值分组

c# - 重置 ThreadLocal<T> 值

javascript - Ajax函数加载