【发布时间】:2021-07-26 19:24:08
【问题描述】:
反序列化时出现以下错误。下面给出了我一直在尝试反序列化的编码块。
错误:无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型 “主题”,因为该类型需要 JSON 对象 (例如 {"name":"value"})正确反序列化。要修复此错误,请更改 JSON 到 JSON 对象(例如 {"name":"value"})或将反序列化类型更改为数组或 实现集合接口(例如 ICollection、IList)的类型,例如 List 可以是 从 JSON 数组反序列化。 JsonArrayAttribute 也可以添加到类型中以强制它 从 JSON 数组反序列化。路径 'Students[3].Subject'.....
JSON:
{
"Students":[
{
"Name":"Mr. X",
"Class":"Ten",
"Roll":5,
"Subject":{
"Name":"Math",
"Marks":90
}
},
{
"Name":"Mr. Y",
"Class":"Ten",
"Roll":7,
"Subject":{
"Name":"Math",
"Marks":80
}
},
{
"Name":"Mr. Z",
"Class":"Ten",
"Roll":8,
"Subject":{
"Name":"Math",
"Marks":75
}
},
{
"Name":"Mr. A",
"Class":"Ten",
"Roll":1,
"Subject":[
{
"Name":"Math",
"Marks":95
},
{
"Name":"English",
"Marks":75
}
]
}
]
}
Program.cs:
Student_Collection students = new Student_Collection();
.....
string jsonString = await response.Content.ReadAsStringAsync();
var settings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
MissingMemberHandling = MissingMemberHandling.Ignore
};
// this the line where I am getting the error
students = JsonConvert.DeserializeObject<Student_Collection>(jsonString, settings);
Subject.cs:
class Subject
{
public string Name { get; set; }
public int Marks { get; set; }
}
Student.cs
class Student
{
public string Name { get; set; }
public string Class { get; set; }
public int Roll { get; set; }
public Subject Subject { get; set; }
}
Student_Collection.cs
class Student_Collection
{
public List<Student> students { get; set; }
}
【问题讨论】:
-
还发布了您要反序列化的 json,很可能 json 中有一些语法错误。你也可以通过一些在线工具来验证json。
-
听起来你试图反序列化的json实际上是一个json数组而不是一个包含数组的对象。反序列化程序需要一个包含数组的对象 {"students":[x,y,z]} 而不是单独的数组 [x,y,z]。
-
您的错误 "Path 'Students[3].Subject'".." 引用了
Students数组中的 3d 索引项,而示例 json 中只有 2 个。 -
Roll和Marks应该是 int 类型 dotnetfiddle.net/bSbBQR 但无论哪种方式,您提供的 json 都不会导致问题... -
以上 json 在我的控制台应用程序中为我工作我能够反序列化并从对象
students.students读取属性您使用的是Newtonsoft.Json哪个版本?
标签: c# json deserialization