问题使用Newtonsoft JSON
问题描述:
我有下面的类反序列化:问题使用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
是Student[]
类型的。所以可以将JsonConvert.DeserializeObject<Student>
的结果分配给arr
。
您需要将文字反序列化到List<Student>
代替,并呼吁.ToArray
如果你想要一个阵列,如下:
Student[] students = JsonConvert.DeserializeObject<List<Student>>(File.ReadAllText(_selectedClass)).ToArray();
答
你在你的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));
谢谢。我以前一直在将数据作为一个数组进行处理,但也许列表可能会更好。时间开始重写! – Luves2spooge