2009-05-06 2 views
8

Ich muss ISerializable in einer abgeleiteten Klasse implementieren (um einige benutzerdefinierte Serialisierung/Deserialisierung durchzuführen), aber die Elternklasse ist als [Serializable] markiert. Die Serialisierung "funktioniert" (ich kann ohne Laufzeitfehler serialisieren und deserialisieren), aber es sieht so aus, als ob die Basisklassendaten nicht erhalten werden.Wenn ich ISerializable in einer untergeordneten Klasse implementieren, müssen auch die Eltern dies tun?

Ist die Tatsache, dass ich GetObjectData in der abgeleiteten Klasse implementieren die Serialisierung der Basisklasse negieren? Wenn ja, muss ich ISerializable in der Basisklasse implementieren und dann base.GetObjectData (...) in der abgeleiteten Klasse aufrufen, um die Daten zu erhalten, oder gibt es einen besseren Weg als info.AddValue (...) 100 Mal zu schreiben ?

edit> Danke Tim. Du hast bestätigt, was ich vermutet habe. Das Problem selbst geht noch einen Schritt weiter. Die Basisklasse implementiert in meinem Fall BindingList (T), die selbst ISerializable nicht implementiert.

In der Zwischenzeit versuche ich für jede Eigenschaft: Im ISerializable-Konstruktor base.Property = info.GetValue (...);

und im GetObjectDate info.AddValue ("name", base.Property);

es sei denn, eine bessere Lösung wird von der wunderbaren SO-Community vorgeschlagen.

Antwort

6

habe ich ISerializable in der Basisklasse zu implementieren und dann base.GetObjectData (...) in der abgeleiteten Klasse nennen

Ja. Sobald Sie ISerializable implementieren, ist eine automatische Serialisierung ausgeschaltet.

Ebenso müssen Sie den geschützten Serialisierungskonstruktor sowohl in der Basisklasse als auch in der abgeleiteten Klasse implementieren.

+1

Sehr gute Info, aber was mache ich, wenn meine Basisklasse selbst von BindingList (T) erbt - die ISerializable nicht implementiert (aber als [Serializable] markiert ist)? –

+0

In der Vergangenheit habe ich das angepackt, indem ich meinem eigenen Serialisierungskonstruktor und der GetObjectData-Methode Code hinzufügte. –

+0

ja, nach meiner Bearbeitung, ich denke, das ist es, was ich auch beschlossen habe. Ich habe nur auf eine elegantere Lösung gehofft. –