2009-12-02 9 views
20

Ich habe eine ganze Liste von Entity-Klassen, die ich Serializable machen muss (aufgrund Speicherung Session-Status in SQL, aber das ist eine andere Geschichte).Wenn die Basisklasse als seriell gekennzeichnet ist, sind alle untergeordneten Klassen ebenfalls markiert?

Ich habe das Attribut [Serializable] hinzugefügt und alles scheint in Ordnung zu sein.

Alle meine Entitätsklassen erstrecken sich von der gleichen Basisklasse. Wenn ich die Basisklasse als serialisierbar markiere, heißt das, dass alle Kinder auch als serialisierbar markiert sind?

Danke

Antwort

32

Nein, Attribut wird nicht vererbt.

Wenn Sie die Klasse erweitern, können Sie Features hinzufügen, die von Natur aus nicht serialisierbar sind, daher kann .NET Framework nicht davon ausgehen, dass alles, was die serialisierbare Basisklasse erweitert, auch serialisierbar ist.

Deshalb müssen Sie das Attribut [Serializable] explizit für jede Klasse einzeln angeben.

+1

Danke, der Sinn macht, und vielen Dank für die schnelle Antwort :) – Russell

6

Nein, jeder muss speziell als [Serializable] markiert werden.

Auch wenn Sie beabsichtigen, ein Objekt in XML zu katalogisieren, das von einem abgeleiteten Typ ist, als wäre es der Basistyp, benötigen Sie auch ein [XmlInclude] -Attribut.

Beispiel:

[Serializable] 
public class BaseClass : ParentClass 
{ 
} 

[Serializable] 
[XmlInclude(typeof(BaseClass))] 
public class ParentClass 
{ 
} 

(Binary Serialisierung, wie das, was für Sitzungen verwendet wird, das nicht brauchen)

+0

Die Serialisierung ist unter der Haube von ASP .net für den SQL-Session-Status, so nicht sicher, ob ich die XmlInclude, aber danke. – Russell

+0

Ah, das XmlInclude ist nur für XML-Serialisierung (die nicht für Sitzungsstatus verwendet wird). Das muss ich verpasst haben, als ich deine Frage gelesen habe. – fyjham

Verwandte Themen