当我试图将我的JSON合并到一个Dictionary<string, Resources>[]中时,我得到了以下错误:
Newtonsoft.Json.JsonSerializationException类型的未处理异常发生在Newtonsoft.Json.dll中 其他信息:无法将当前JSON对象(例如,{“名称”:“值”})反序列化为'System.Collections.Generic.Dictionary`2System.String,MyProject.Resource‘类型,因为该类型需要一个JSON数组(例如,1,2,3)才能正确反序列化。 要修复此错误,要么将JSON更改为JSON数组(例如,1,2,3),要么更改反序列化类型,使之成为可以从JSON对象反序列化的普通.NET类型(例如,不像整数这样的原始类型,而不是数组或列表之类的集合类型)。还可以将JsonObjectAttribute添加到类型中,以强制它从JSON对象反序列化。
我的Program.Main():
public class Program
{
public static void Main(string[] Args)
{
var options = new Options()
{
Option1 = "foo",
Option2 = "bar",
Resources = JsonConvert.DeserializeObject<Dictionary<string, Resource>[]>(resources.json)
};
}
}我的resources.json:
{
"global": [
{
"title": "global1",
"url": "~/global1"
},
{
"title": "global2",
"url": "~/global2"
}
],
"ACC": [
{
"title": "acc1",
"url": "~/acc1/"
},
{
"title": "acc2",
"url": "~/acc2/"
}
],
"ECC": [
{
"title": "ecc1",
"url": "~/ecc1/"
},
{
"title": "ecc2",
"url": "~/ecc2/"
}
],
"ECB": [
{
"title": "ecb1",
"url": "~/ecb1"
}
]
}我的资源课:
public class Resource
{
public List<string> titles { get; set; }
public List<string> urls { get; set; }
}我的选项课:
public class Options
{
public string Option1 { get; set; }
public string Option2 { get; set; }
public Dictionary<string, Resource>[] Resources { get; set; }
}发布于 2016-10-11 17:55:07
JSON并不表示字典(Dictionary<string, Resource>[])数组,而是表示数组字典(Dictionary<string, Resource[]>)。这就是为什么你要得到错误。
此外,还需要像这样定义Resource类以匹配JSON:
public class Resource
{
public string Title { get; set; }
public string Url { get; set; }
}然后您可以像这样反序列化:
Resources = JsonConvert.DeserializeObject<Dictionary<string, Resource[]>>(resources.json)发布于 2016-10-11 14:52:52
你的Json和你的班级结构不匹配。
如果要保持类的结构,json必须如下所示:
{
"global":{
"titles":[
"global1",
"global2"
],
"urls":[
"~/global1",
"~/global2"
]
},
"acc":{
"titles":[
"acc1",
"acc2"
],
"urls":[
"~/acc1",
"~/acc2"
]
},
...
}如果您无法影响您的json文件(无论出于什么原因),您的类结构必须如下所示:
public class Rootobject
{
public Global[] global { get; set; }
public ACC[] ACC { get; set; }
public ECC[] ECC { get; set; }
public ECB[] ECB { get; set; }
}
public class Global
{
public string title { get; set; }
public string url { get; set; }
}
public class ACC
{
public string title { get; set; }
public string url { get; set; }
}
public class ECC
{
public string title { get; set; }
public string url { get; set; }
}
public class ECB
{
public string title { get; set; }
public string url { get; set; }
}然后您可以这样反序列化它:
Resources = JsonConvert.DeserializeObject<Rootobject>(resources.json)下一次请注意:
如果您不确定类结构的外观(关于json字符串),可以复制json字符串并转到:
Visual ->编辑->粘贴特殊->粘贴为类
Visual将组成适当的类结构。
https://stackoverflow.com/questions/39979932
复制相似问题