问题使用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类型的对象的方法中,而可变arrStudent[]类型的。所以可以将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)); 
+0

谢谢。我以前一直在将数据作为一个数组进行处理,但也许列表可能会更好。时间开始重写! – Luves2spooge