我有以下类:
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))
其中_selectedClass是包含文件名的字符串。但我收到一个错误
无法将WindowsFormApplicationsForm1.Form.Student转换为WindowsFormApplicationsForm1.Form.Student[]
您在JsonConvert.DeserializeObject中指出,您正试图将其反序列化为单个Student
实例。不是数组。并且不需要在一条语句中初始化数组,然后在另一条语句上为其赋值。不管怎样,现在我们通常使用泛型数组。
替换:
Student[] arr = new Student[numberOfStudentsInClass];
arr = JsonConvert.DeserializeObject<Student>(File.ReadAllText(_selectedClass))
有了这个:
List<Student> students =
JsonConvert.DeserializeObject<List<Student>>(File.ReadAllText(_selectedClass));
由于异常状态,方法JsonConvert.DeserializeObject<Student>
返回一个类型为Student
的对象,而变量arr
的类型是Student[]
。因此不能将JsonConvert.DeserializeObject<Student>
的结果分配给arr
。
您需要将文本反序列化为List<Student>
,如果您想要如下数组,则需要调用.ToArray
:
Student[] students = JsonConvert.DeserializeObject<List<Student>>(File.ReadAllText(_selectedClass)).ToArray();