Почему мой объект .Net не сериализуем? - PullRequest
6 голосов
/ 03 июня 2010

У меня есть класс MyDataTable, который наследуется от System.Data.DataTable

Я реализовал ISerializable в своем классе, и у меня есть 'Public Overrides Sub GetObjectData ...'

Но когда я пытаюсь сериализовать объект 'MyDataTable', я получаю сообщение об ошибке, в котором говорится, что 'MyDataTable' не помечен как сериализуемый.

Если я вместо этого использовал DataTable - мой код сериализуется правильно. Если я добавляю сериализуемый атрибут в класс «MyDataTable» - он сериализуется правильно, но мне говорят, что это не нужно, если я реализую ISerializable.

Может ли кто-нибудь указать мне правильное направление?

Ответы [ 2 ]

8 голосов
/ 03 июня 2010

Кто бы вам ни сказал, что нет необходимости добавлять SerializableAttribute , это неверно:

Примените атрибут SerializableAttribute, даже если класс также реализует интерфейс ISerializable для управления процессом сериализации.

И из записи ISerializable (добавлено em ):

Любой класс, который может быть сериализован , должен быть помечен атрибутом SerializableAttribute . Если класс должен управлять процессом сериализации, он может реализовать интерфейс ISerializable.

1 голос
/ 03 июня 2010

Вам необходимо добавить атрибут SerializableAttribute, даже если вы реализуете ISerializable. Хотя это обсуждает правило FxCop, это от http://msdn.microsoft.com/en-us/library/ms182350(VS.80).aspx:

Быть признанным общим язык выполнения как сериализуемый, типы должны быть помечены Атрибут SerializableAttribute даже если тип использует пользовательский рутина сериализации через реализация ISerializable интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...