Deserialisierung

17/12/2009 - 12:25 von Christian Mauerer | Report spam
Hallo,

ich habe ein Problem mit der Deserialisierung.
Ich habe einen Stream, in welchen ich die Daten der Objekte schreiben
möchte.
Das schreiben klappt soweit.

Test ct = new Test();
BinaryFormatter bf = new BinaryFormatter();
long pos = io.BinWriter.BaseStream.Position;
bf.Serialize(io.BinWriter.BaseStream, ct);
io.BinWriter.BaseStream.Position = pos;
BinaryFormatter bfRead = new BinaryFormatter();
Test ctNew = (Test)bfRead.Deserialize(io.BinWriter.BaseStream);

Die Klasse 'Test' implementiert die Schnittstelle ISerializable.

Das klappt soweit ja super, wenn der Konstruktor der Klasse 'Test' keine
Parameter erwartet.
Doch ich habe nun den Fall, dass der Konstruktor der Klasse 'Test' ein
Parameter übergeben werden muss.
Wie kann ich bei der Deserialisierung einen Parameter für den Konstruktor
übergeben?

Vielen Dank und schöne Grüße
Christian
 

Lesen sie die antworten

#1 Peter Fleischer
17/12/2009 - 21:57 | Warnen spam
"Christian Mauerer" schrieb im Newsbeitrag
news:

ich habe ein Problem mit der Deserialisierung.
Ich habe einen Stream, in welchen ich die Daten der Objekte schreiben
möchte.
Das schreiben klappt soweit.

Test ct = new Test();
BinaryFormatter bf = new BinaryFormatter();
long pos = io.BinWriter.BaseStream.Position;
bf.Serialize(io.BinWriter.BaseStream, ct);
io.BinWriter.BaseStream.Position = pos;
BinaryFormatter bfRead = new BinaryFormatter();
Test ctNew = (Test)bfRead.Deserialize(io.BinWriter.BaseStream);

Die Klasse 'Test' implementiert die Schnittstelle ISerializable.

Das klappt soweit ja super, wenn der Konstruktor der Klasse 'Test' keine
Parameter erwartet.
Doch ich habe nun den Fall, dass der Konstruktor der Klasse 'Test' ein
Parameter übergeben werden muss.
Wie kann ich bei der Deserialisierung einen Parameter für den Konstruktor
übergeben?



Hi Christian,
da das Objekt vor dem Deserialisieren bereist existiert und mit dem
Deserialisieren nur in eine andere (Darstellungs-) Form überführt wird,
entsteht die Frage, was du mit dem wiederholten Aufruf des Konstrukturs, der
nur beim ersten Erstellen eines Objektes aufgerufen wird, erreichen willst.
Wenn du in einem vorhandenen Objekt etwas veràndern willst, musst du die
entsprechenden Eigenschaften und/oder Methoden nutzen. Dazu könnte auch eine
CreateObject-Methode gehören, die aus dem vorhandenen deserialisierten
Objekt eine neue Instanz (Kopie mit zusàtzlichen Instanzparametern) erzeugt.

Viele Gruesse

Peter

Ähnliche fragen