XML-Daten speichern klappt super, aber lesen klappt nicht (InvalidOperationException oder InvalidCastException)

Beim Serialisieren von Objekten im XML-Format legen Sie in den Anwendungseinstellungen den Pfad fest, unter dem die Datei mit den Daten gespeichert werden soll. Nach dem Speichern kann man dort mit einem Text-Editor bequem kontrollieren, ob die Objekte richtig im XML-Format gespeichert wurden. Wenn das gut geklappt hat, sollte doch auch das Laden klappen.

Allerdings kann es dabei zu einem Fehler kommen, die man nicht leicht findet. Meistens ist in einem solchen Fall mit einer InvalidCastException zu rechnen:

xml-InvalidOperationException3

Zuvor kann aber auch eine InvalidOperationException auftreten.

xml-InvalidOperationException1

In beiden Fällen werden keine Objekte aus den vorliegenden XML-Daten erzeugt. Das merkt man dann schon. 🙂

Wichtig ist, dass Sie beim Deserialisieren der Daten angeben, was in der Datei zuvor gespeichert wurde. Also genauer, Sie müssen angeben, von welcher Klasse die Objekte sind, die in der XML-Datei stecken. Im Beispiel mit der Fehlermeldung wurden in der Datei Termin.xml die Termine gespeichert – also Objekte der Klasse Termin. Beim Laden sollen aus dieser Datei aber die Aufgaben (Objekte der Klasse Aufgabe) geladen werden.

xml-InvalidOperationException2

Nun findet das System in der Datei keine Aufgaben und zeigt deshalb einen Fehler. Richtig müsste die Zeile mit der Deserialisierung deshalb so lauten:

objXmlSerializer = New XmlSerializer(GetType(List(Of Termin)))

So sollte es funktionieren. Weiterhin viel Spaß!

Schreibe einen Kommentar