我有以下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位。
任何人都要小心解释我将如何解决这个问题,特别是序列化
答案 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);