我有一个在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);
这总是帮助我。