2011-10-04 15 views
5

Eventuali duplicati:
Serializable InheritanceC# serializzazione/Eredità

è serializzazione ereditabile?

Esempio:

[Serializable] 
class A 
{ 
} 

class B : A 
{ 
} 

Se provo a serializzare/deserializzare un'istanza della classe B, ottengo un'eccezione che indica che la classe non è contrassegnato come serializzabile. Quindi la domanda: la serializzazione è ereditabile? Mi manca solo come farlo, o ogni classe che necessita di essere serializzata richiede esplicitamente di essere contrassegnata come tale?

risposta

11

E 'not inheritable:

E' importante notare che l'attributo Serializable non può essere ereditata. Se si deriva una nuova classe da MyObject, anche la nuova classe deve essere contrassegnata con l'attributo oppure non può essere serializzata.

Si dovrebbe contrassegnare la sottoclasse anche per rendere serializzabile:

[Serializable] 
class B : A { } 
+2

nota minore; * in questo caso *, la proprietà 'Inherited' di questo attributo non è direttamente rilevante (anche se può essere corretta). Questo perché nel livello dei metadati, '[Serializable]' è *** not *** implementato come attributo, ma come flag di classe CLI (è possibile verificarlo nel flusso IL). –

+1

Grazie per la nota Marc, è sicuramente _non_ minor! –

+0

@Marc Gravell: modificato il testo e rimosso quel riferimento di proprietà ... Grazie –