[英]Deserialize json array of dictionaries in c#
我有一系列字典,我用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上創建一個類,並使用此類/此類的List(取決於您的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);
這總能幫助我。 希望它也能幫到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.