簡體   English   中英

我如何反序列化這本詞典<string,string[]>

[英]How do i deserialize this dictionary<string,string[]>

我有以下json:

[
    {
        "Key": "tradepack",
        "Value": [
            "Select Tradepack"
        ]
    },
    {
        "Key": "route",
        "Value": [
            "Select Route"
        ]
    },
    {
        "Key": "recall",
        "Value": [
            "Select Recall Location"
        ]
    },
    {
        "Key": "stones",
        "Value": [
            "True"
        ]
    },
    {
        "Key": "quickstep",
        "Value": [
            "True"
        ]
    },
    {
        "Key": "dreamingdonkey",
        "Value": [
            "True"
        ]
    },
    {
        "Key": "meleeskills",
        "Value": []
    },
    {
        "Key": "rangedskills",
        "Value": []
    },
    {
        "Key": "buffedskills",
        "Value": []
    }
]

我目前正在使用這個

String data = System.IO.File.ReadAllText(Application.StartupPath + "\\folder\\Data\\Config\\config.txt");
return JsonConvert.DeserializeObject<Dictionary<string, object[]>>(data);

但我得到以下錯誤

無法將當前JSON數組(例如[1,2,3])反序列化為類型'System.Collections.Generic.Dictionary`2 [System.String,System.Object []]',因為該類型需要JSON對象(例如{ “ name”:“ value”})正確反序列化。 要解決此錯誤,可以將JSON更改為JSON對象(例如{“ name”:“ value”}),也可以將反序列化類型更改為數組,或者將實現集合接口的類型(例如ICollection,IList)更改為List,例如List從JSON數組反序列化。 還可以將JsonArrayAttribute添加到類型中,以強制其從JSON數組反序列化。 路徑'',第1行,位置1。

任何人都想解釋一下,因為我將如何解決這個問題,特別是在序列化中,C#

您的json是一個數組/列表。 所以您需要反序列化為類似List<Dictionary<string, object>>

 var data = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(json);

要么

var dict = JArray.Parse(json)
           .Select(x => x.ToObject<KeyValuePair<string, string[]>>())
           .ToDictionary(x => x.Key, x => x.Value);

您的數據看起來更像KeyValuePair<string, string[]>[] 您可以嘗試將其反序列化,然后根據結果創建字典。

var kvps = JsonConvert.DeserializeObject<KeyValuePair<String, String[]>[]>(data);
return kvps.ToDictionary((keyItem) => keyItem.Key, (valueItem) => valueItem.Value);

暫無
暫無

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

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