Entwickler-Ecke

IO, XML und Registry - Deserialize als Methode


Dirk Bock - Mi 22.10.08 10:35
Titel: Deserialize als Methode
Hallo und vorab den Anfänger-Alarm! :oops: Meine Programmiererfahrung liegt nicht nur lange zurück, sondern beschränkt sich zudem auf PASCAL und FORTRAN...

Ich habe eine Klasse ItemList auf Basis von LIST<T> geschrieben, in der ich Listen von Objekten verwalten will, Jede Instanz der Klasse organisiert Daten einer bestimmten Klasse aus einer umfangreichen Hierarchie.

Die Daten sollen im XML-Format gespeichert werden. Das Schreiben der Daten funktioniert auch problemlos über eine Methode WriteToFile. Ähnliches will ich auch für das Lesen der Daten haben: eine Methode ReadFromFile der Klasse ItemList.

Meine Frage ist nun: Wie schreibe ich die Methode so, dass beim Aufruf myItemList.ReadFromFile(FileName) der Dateiinhalt von FileName in die Instanz myItemList deserialisiert wird?

Hilflos...

---Dirk Bock


Th69 - Mi 22.10.08 11:51

Lies dir mal das Kapitel 11 bzw. 11.4 von http://openbook.galileocomputing.de/visual_csharp/ durch.


Ralf Jansen - Mi 22.10.08 13:01

Zitat:
Meine Frage ist nun: Wie schreibe ich die Methode so, dass beim Aufruf myItemList.ReadFromFile(FileName) der Dateiinhalt von FileName in die Instanz myItemList deserialisiert wird?


Das Deserialisieren so wie es im Framework implementiert ist (also so wie es zum Beispiel im erwähnten OpenBook beschrieben ist) erzeugt dir AFAIK immer eine neue Instanz der serialisierten Klasse. Gibt es einen zwingenden Grund das es in die bereits vorhandene Instanz rein deserialisiert werden muß?
Wenn ja bleibt dir wohl nur die Möglichkeit das in deiner Methode so zu lösen das erst in eine neue Instanz deserialisiert wird und du dann manuell die Daten in die vorhanden Instanz kopierst.


Dirk Bock - Mi 22.10.08 16:24

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Das Deserialisieren so wie es im Framework implementiert ist (also so wie es zum Beispiel im erwähnten OpenBook beschrieben ist) erzeugt dir AFAIK immer eine neue Instanz der serialisierten Klasse. Gibt es einen zwingenden Grund das es in die bereits vorhandene Instanz rein deserialisiert werden muß?


Nein, muss es nicht; ich habe mich eines Besseren belehren lassen (Danke!) und ReadFromFile als statische Methode implementiert, die das Objekt ItemList<DataItem> zurückliefert.

Leider funktioniert es nicht ganz so wie ich mir das wünsche: beim Deserialisieren wird ItemList<DataItem> zwar korrekt generiert - die Anzahl der Listenelemente stimmt - doch leider werden alle Felder der DataItems zu null.

Wenn ich meine ItemList mit <string> statt mit <DataUtem> fülle, geht alles gut.

Da werde ich noch ein wenig forschen und lernen müssen.

Vielen Dank!

---Dirk Bock