Laden...

Nur Basisklasse serialisieren?

Erstellt von sunnyandy vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.402 Views
S
sunnyandy Themenstarter:in
22 Beiträge seit 2007
vor 14 Jahren
Nur Basisklasse serialisieren?

Hallo,

ich habe folgendes Problem. Meine Basisklasse ist serialisierbar, die davon abgeleitete Klasse nicht. Beim Versenden im Netzwerke benutze ich nur Vererbungen von BaseClass (wie ClassA). Auch wenn ich die Vererbungen als BaseClass umwandele, wird anscheinend immer versucht, auch meine ClassA zu serialisieren. Dabei möchte ich aber nur die Daten aus der BaseClass versenden.
Wie kann ich das am besten lösen?

public class ClassA: BaseClass
{

}

[Serializable]
public class BaseClass
{

}

...

RequestData requestData = new ClassA();
BinaryFormatter binaryFormatter = new BinaryFormatter();
MemoryStream dataStream = new MemoryStream();
binaryFormatter.Serialize(dataStream, (BaseClass) requestData); // Hier knallts. Er versucht, ClassA zu serialisieren. Er soll aber nur BaseClass serialisieren.

4.506 Beiträge seit 2004
vor 14 Jahren

Hallo sunnyandy,

hier musst Du auf die manuelle Serialisierung zurückgreifen, denn die automatische nimmt immer die konkrete Klasse, und begnügt sich nicht nur mit der Basisklasse. Wie kann auch ein außenstehender wissen, ob die Kindklasse nicht relevante "Daten" aus der Basisklasse verwendet und verändert.

Die manuelle Serialisierung ist nicht sonderlich schwer, Du musst lediglich das Interface "ISerializable" in der Basisklasse implementieren und einen speziellen "protected" Konstruktor anbieten. Ein sehr gutes Beispiel hierzu findest Du in der MSDN: ISerializable.GetObjectData-Methode

Das direkte Beispiel in der MSDN - ISerializable-Schnittstelle ist wesentlich schwieriger zu verstehen, zeigt aber, dass es auch für komplexe Fälle anwendbar ist.

Viele Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

S
sunnyandy Themenstarter:in
22 Beiträge seit 2007
vor 14 Jahren

Hallo!

Wunderbar, danke für den tollen Tipp. Darauf bin ich bisher noch nicht gestoßen.

Grüße,
Andy