2010-06-02 2 views
6

J'ai une classe « MyDataTable » qui hérite de System.Data.DataTablePourquoi mon objet .Net n'est-il pas sérialisable?

J'ai mis ISerializable dans ma classe et un « Public Overrides Sub GetObjectData ... »

Mais quand je essayez de sérialiser l'objet de 'MyDataTable' Je reçois une erreur disant que 'MyDataTable' n'est pas marqué comme sérialisable.

Si j'ai utilisé un DataTable à la place - mon code sérialisé correctement. Si j'ajoute un attribut sérialisable à la classe 'MyDataTable' - il se sérialise correctement, mais on me dit que c'est inutile si j'implémente ISerializable.

Quelqu'un peut-il me diriger dans la bonne direction?

Répondre

8

Celui qui vous a dit qu'il est inutile d'ajouter le SerializableAttribute est incorrect:

Appliquer l'attribut SerializableAttribute même si la classe implémente également l'interface ISerializable pour contrôler le processus de sérialisation.

Et à partir de l'entrée ISerializable (em ajoutée):

Toute classe qui pourrait être sérialisé doit être marqué du SerializableAttribute. Si une classe doit contrôler son processus de sérialisation, elle peut implémenter l'interface ISerializable.

+0

Nous vous remercions de votre réponse rapide. Mes tests semblent soutenir cela et les exemples que j'ai trouvés dans le MSDN semblent également être d'accord. –

1

Vous devez ajouter SerializableAttribute, même si vous implémentez ISerializable. Bien que cette traite une règle FxCop, c'est de http://msdn.microsoft.com/en-us/library/ms182350(VS.80).aspx:

Pour être reconnue par le moteur d'exécution de langage commun comme sérialisable, types doivent être marqués avec l'attribut SerializableAttribute même si le type utilise une sérialisation personnalisée routine par l'implémentation de l'interface ISerializable .

Questions connexes