使用Newtonsoft JSON进行反序列化时出现问题



我有以下类:

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();

相关内容

  • 没有找到相关文章

最新更新