簡體   English   中英

將JSON解析為字典 <string, List<string> &gt;

[英]Parse JSON to a Dictionary<string, List<string>>

我有一個類似於以下內容的JSON節點。

"folders":[
    {"Videos":[1196717,2874999,898084]},
    {"Fun":[2443301,3671]},
    {"News":[62689,58867,11385]}
]

我想反序列化為Dictionary<string, List<int>>或類似的東西。 我目前有成員:

[DataMember(Name = "folders")]
public Dictionary<string, List<int>> Folders;

我希望輸出像:

Folders = new Dictionary<string, List<int>>() {
    {"Videos", new List<int>() { 1196717, 2874999, 898084 }},
    {"Fun",    new List<int>() { 2443301, 3671 }},
    {"News",   new List<int>() { 62689, 58867, 11385 }}
};

我已經將反序列化器實現為:

var serializer = new DataContractJsonSerializer(
    typeof(T),
    new DataContractJsonSerializerSettings() {
        DateTimeFormat = new DateTimeFormat("yyyy-MM-ddTHH:mm:ss.fffffffZ"),
    }
);
T result = (T)serializer.ReadObject(response);

但是公正會產生錯誤:

數據協定類型'System.Runtime.Serialization.KeyValue`2 [[System.String,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.Collections.Generic.List`1 [[System .Int32,mscorlib,版本= 4.0.0.0,文化=中性,PublicKeyToken = b77a5c561934e089]],mscorlib,版本= 4.0.0.0,文化=中性,PublicKeyToken = b77a5c561934e089]]'無法反序列化,因為所需的數據成員'Key,找不到價值。

我了解這是因為它期待更多類似的東西,但是格式超出了我的控制范圍。

"folders":[
    {
        "key":"Videos",
        "value":[1196717,2874999,898084]
    },{
        "key":"Fun",
        "value":[2443301,3671]
    },{
        "key":"News",
        "value":[62689,58867,11385]
    }
]

我該怎么做反序列化?

具有:C#

public class wrap
{
    public List<Dictionary<string, List<string>>> folders { get; set; }
}

傑森:

{"folders":[
    {"Videos":[1196717,2874999,898084]},
    {"Fun":[2443301,3671]},
    {"News":[62689,58867,11385]}
]
}

使用NewtonJson解串器:

JsonDeserializer.Deserialize<wrap>(JsonInput)

我獲得了3項字典清單的成功對象。

使用DataContractJsonSerializer:

var serialzier = new DataContractJsonSerializer(typeof(wrap));
var stream = new MemoryStream(Encoding.UTF8.GetBytes(JsonInput));
Result = (wrap)serialzier.ReadObject(stream);

我收到了3項字典列表的不成功對象,但它們為空。 也許DataContractJsonSerializer需要一些調整?

希望能幫助到你。

我為此使用了JavaScriptSerializer 基本上,您的json實際上是Dictionary<string, object> 我不確定為什么不讓它強制轉換為列表,但是無論如何,這里有幾行簡單的代碼可以幫助您完成任務。

請注意,我將其用作jsonString(即沒有“ video:”部分)

[
    {"Videos":[1196717,2874999,898084]},
    {"Fun":[2443301,3671]},
    {"News":[62689,58867,11385]}
]

如果要在視頻中使用它,則它是字典的另一層,即Dictionary<string, Dictionary<string, object>>但工作方式相同

碼:

    Dictionary<string, List<int>> result = new Dictionary<string, List<int>>();
    object[] desirializedJsonObject =(object[])new JavaScriptSerializer().DeserializeObject(jsonString);
    foreach (var obj in desirializedJsonObject)
    {
        // Get the record
        var firstRecord   = ((Dictionary<string, object>)obj).First();

        // Creat list of values
        var listOfValues = ((object[])firstRecord.Value).Select(x => Convert.ToInt32(x)).ToList();

        result.Add(firstRecord.Key, listOfValues);
    }

使用KeyValuePair類代替字典,

List<KeyValuePair<string, List<string>>> uploadedfiles = JsonConvert.DeserializeObject<List<KeyValuePair<string, List<string>>>>(json)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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