2016-04-15 2 views
0

У меня есть следующий класс:Проблемы десериализации с использованием 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 []

ответ

3

Как состояний исключения, метод JsonConvert.DeserializeObject<Student> возвращает объект типа Student, в то время как переменная arr имеет тип Student[] .so вы можете Не назначать результат JsonConvert.DeserializeObject<Student> - arr.

вам нужно Deserialize текст в List<Student> вместо и вызвать .ToArray, если вы хотите массив таким образом, следующим образом:

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

Вы указали в своем 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

Смежные вопросы