Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Newtonsoft JSON反序列化时出现的问题_C#_Json_Json.net - Fatal编程技术网

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

谢谢。我以前一直将数据作为数组处理,但作为列表可能更好。是时候开始重写了!