2016-04-15 32 views
0

Ich habe die folgende Klasse:Probleme Deserialisieren mit Newtonsoft JSON

public class Student 
{ 
    public int studentNumber; 
    public string testWeek; 
    public string topics; 
} 

ich es ein paar Sachen zu tun, serialisiert sie und sie in einer Datei speichern. Es sieht so aus:

[ 
    { 
    "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" 
    } 
] 

Später möchte ich es deserialisieren, damit ich wieder daran arbeiten kann. Ich habe diesen Code

Student[] arr = new Student[numberOfStudentsInClass]; 
arr = JsonConvert.DeserializeObject<Student>(File.ReadAllText(_selectedClass)) 

Wo _selectedClass ist Zeichenfolge, die den Dateinamen enthält. Aber ich bin immer einen Fehler

Kann nicht konvertieren WindowsFormApplicationsForm1.Form.Student zu WindowsFormApplicationsForm1.Form.Student []

Antwort

3

Da die Ausnahmezustände, die Methode JsonConvert.DeserializeObject<Student> ein Objekt vom Typ zurückgibt Student, während die Variable arr vom Typ Student[] .so können Sie Das Ergebnis von JsonConvert.DeserializeObject<Student> darf nicht arr zugewiesen werden.

müssen Sie Ihren Text in eine List<Student> stattdessen Deserialize und rufen .ToArray wenn Sie ein Array so wollen wie folgt:

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

Sie in Ihrem JsonConvert.DeserializeObject angegeben, dass Sie versuchen, eine einzelne Student deserialisieren Beispiel. Kein Array. Und es ist nicht notwendig, das Array in einer Anweisung zu initialisieren und dann einem anderen Wert zuzuordnen. Und generell verwenden wir heutzutage generische Arrays.

ersetzen:

Student[] arr = new Student[numberOfStudentsInClass]; 
arr = JsonConvert.DeserializeObject<Student>(File.ReadAllText(_selectedClass)) 

mit diesem:

List<Student> students = 
    JsonConvert.DeserializeObject<List<Student>>(File.ReadAllText(_selectedClass)); 
+0

Danke. Ich hatte vorher an den Daten als ein Array gearbeitet, aber vielleicht als eine Liste könnte besser sein. Zeit um mit dem Umschreiben zu beginnen! – Luves2spooge