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



我有一个在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);

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

将type传递给JsonConvert。DeserializeObject类类型部分。例如

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

在你的例子中,它只是一个Temp类的数组吗

public class Temp
{
    public string key { get; set; }
    public string value { get; set; }
}
你只需要:-
var output = JsonConvert.DeserializeObject<List<Temp>>(json);

您可以按照其他答案的建议将此列表转换为字典:-

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

这总是帮助我。

相关内容

  • 没有找到相关文章

最新更新