C# 使用Newtonsoft JSON反序列化时出现的问题
我有以下课程:C# 使用Newtonsoft JSON反序列化时出现的问题,c#,json,json.net,C#,Json,Json.net,我有以下课程: public class Student { public int studentNumber; public string testWeek; public string topics; } 我对它做了一些事情,序列化它并将其保存在一个文件中。看起来是这样的: [ { "studentNumber": 1, "testWeek": "1", "topics": "5 & 8" }, { "studen
public class Student
{
public int studentNumber;
public string testWeek;
public string topics;
}
我对它做了一些事情,序列化它并将其保存在一个文件中。看起来是这样的:
[
{
"studentNumber": 1,
"testWeek": "1",
"topics": "5 & 8"
},
{
"studentNumber": 2,
"testWeek": "1",
"topics": "5 & 8"
},
{
"studentNumber": 3,
"testWeek": "1",
"topics": "5 & 8"
},
{
"studentNumber": 4,
"testWeek": "1",
"topics": "5 & 8"
},
{
"studentNumber": 5,
"testWeek": "1",
"topics": "5 & 8"
}
]
稍后我想反序列化它,这样我就可以再次处理它。我有这个密码
Student[] arr = new Student[numberOfStudentsInClass];
arr = JsonConvert.DeserializeObject<Student>(File.ReadAllText(_selectedClass))
Student[]arr=新学生[numberOfStudentsInClass];
arr=JsonConvert.DeserializeObject(File.ReadAllText(_selectedClass))
其中_selectedClass是包含文件名的字符串。但是我犯了个错误
无法将WindowsFormApplicationForm1.Form.Student转换为WindowsFormApplicationForm1.Form.Student[]
您在JsonConvert.DeserializeObject中指出,您正试图将其反序列化为单个
Student
实例。不是数组。无需在一条语句中初始化数组,然后在另一条语句中为其赋值。不管怎样,现在我们通常使用通用数组
替换:
Student[] arr = new Student[numberOfStudentsInClass];
arr = JsonConvert.DeserializeObject<Student>(File.ReadAllText(_selectedClass))
Student[]arr=新学生[numberOfStudentsInClass];
arr=JsonConvert.DeserializeObject(File.ReadAllText(_selectedClass))
为此:
List<Student> students =
JsonConvert.DeserializeObject<List<Student>>(File.ReadAllText(_selectedClass));
列出学生=
JsonConvert.DeserializeObject(File.ReadAllText(_selectedClass));
作为例外情况,方法JsonConvert.DeserializeObject
返回类型为Student
的对象,而变量arr
类型为Student[]
。因此您无法将JsonConvert.DeserializeObject
的结果分配给arr
如果需要如下数组,则需要将文本反序列化为列表
,并调用.ToArray
:
Student[] students = JsonConvert.DeserializeObject<List<Student>>(File.ReadAllText(_selectedClass)).ToArray();
Student[]students=JsonConvert.DeserializeObject(File.ReadAllText(_selectedClass)).ToArray();
谢谢。我以前一直将数据作为数组处理,但作为列表可能更好。是时候开始重写了!