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

时间:2015-05-21 21:23:25

标签: c# json json.net

我在javascript中创建了一系列字典。序列化为json后,我得到以下字符串:

ListBox

我很难将这个反序列化到c#中的列表或字典中。

我试过了:

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

但这不起作用。

2 个答案:

答案 0 :(得分:12)

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

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);

答案 1 :(得分:3)

我的建议是试着看看你的json代表什么。您可以在Json2CSharp上创建一个类,并使用此类/此类的列表(取决于您的json是数组形式还是简单类对象)。

只需将类型传递给 JsonConvert.DeserializeObject 类类型部分。例如

var output = JsonConvert.DeserializeObject<List<Class>>(json);

在你的情况下,它只是一个Temp类

的数组
public class Temp
{
    public string key { get; set; }
    public string value { get; set; }
}

Sp你所需要的只是: -

var output = JsonConvert.DeserializeObject<List<Temp>>(json);

您可以将此列表转换为字典,如其他答案所示:

var dictionary = output.ToDictionary(x => x.Key, y => y.Value);

这总能帮助我。希望它也能帮助你。