如何反序列化此字典<string,string []> </string,string []>

时间:2014-10-07 19:55:54

标签: c# json

我有以下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从JSON数组反序列化。 JsonArrayAttribute也可以添加到类型中以强制它从JSON数组反序列化。   路径'',第1行,第1位。

任何人都要小心解释我将如何解决这个问题,特别是序列化

2 个答案:

答案 0 :(得分:3)

你的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);

答案 1 :(得分:-1)

您的数据看起来更像KeyValuePair<string, string[]>[]。您可以尝试反序列化,然后根据结果创建字典。

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