簡體   English   中英

在c#中反序列化json數組的字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM