2010-06-02 16 views
6

Ho una classe di 'MyDataTable' che eredita da System.Data.DataTablePerché il mio oggetto .Net non è serializzabile?

Ho implementato ISerializable nella mia classe e hanno un 'Public Overrides Sub GetObjectData ...'

Ma quando ho prova a serializzare un oggetto di "MyDataTable". Ricevo un errore che dice che "MyDataTable" non è contrassegnato come serializzabile.

Se ho utilizzato un DataTable al contrario, il mio codice si serializza correttamente. Se aggiungo un attributo serializzabile alla classe 'MyDataTable' - si serializza correttamente, ma mi viene detto che non è necessario se implemento ISerializable.

Qualcuno può indicarmi la giusta direzione?

risposta

8

Chi ti ha detto che è necessario aggiungere il SerializableAttribute non è corretto:

Applicare l'attributo SerializableAttribute anche se la classe implementa anche l'interfaccia ISerializable per controllare il processo di serializzazione.

E dal ISerializable ingresso (em aggiunto):

Ogni classe che potrebbe essere serializzato deve essere contrassegnato con il SerializableAttribute. Se una classe ha bisogno di controllare il suo processo di serializzazione, può implementare l'interfaccia ISerializable.

+0

Grazie per la rapida risposta. Il mio test sembra supportare questo e gli esempi che ho trovato nel MSDN sembrano essere d'accordo. –

1

È necessario aggiungere il SerializableAttribute, anche se si implementa ISerializable. Anche se questo discute una regola FxCop, questo è da http://msdn.microsoft.com/en-us/library/ms182350(VS.80).aspx:

di essere riconosciuto dal comune Language Runtime come serializzabile, tipi devono essere marcati con l'attributo SerializableAttribute anche se il tipo utilizza un personalizzato serializzazione routine attraverso l'implementazione dell'interfaccia ISerializable .

Problemi correlati