我在javascript中创建了一系列字典。序列化为json后,我得到以下字符串:
ListBox
我很难将这个反序列化到c#中的列表或字典中。
我试过了:
"[{\"key\":\"60236\",\"value\":\"1\"},{\"key\":\"60235\",\"value\":\"gdsfgdfsg\"},{\"key\":\"60237\",\"value\":\"1\"}]"
但这不起作用。
答案 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);
这总能帮助我。希望它也能帮助你。