【问题标题】:Problems deserializing using Newtonsoft JSON使用 Newtonsoft JSON 反序列化的问题
【发布时间】:2016-04-15 12:04:45
【问题描述】:

我有以下课程:

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[]

【问题讨论】:

    标签: c# json json.net


    【解决方案1】:

    您在 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));
    

    【讨论】:

    • 谢谢。我以前一直将数据作为数组处理,但作为列表可能会更好。是时候开始重写了!
    【解决方案2】:

    如异常所述,方法JsonConvert.DeserializeObject&lt;Student&gt;返回一个Student类型的对象,而变量arrStudent[]类型。所以你不能将JsonConvert.DeserializeObject&lt;Student&gt;的结果分配给@987654326 @。

    您需要将您的文本反序列化为List&lt;Student&gt;,如果您需要如下数组,请调用.ToArray

    Student[] students = JsonConvert.DeserializeObject<List<Student>>(File.ReadAllText(_selectedClass)).ToArray();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      相关资源
      最近更新 更多