2010-06-02 26 views
6

Tengo una clase 'MyDataTable' que hereda de System.Data.DataTable¿Por qué mi objeto .Net no se puede serializar?

he implementado ISerializable en mi clase y tienen un 'Public Overrides Sub GetObjectData ...'

Pero cuando intente serializar el objeto de 'MyDataTable'. Recibo un error que dice que 'MyDataTable' no está marcado como serializable.

Si utilicé una DataTable, mi código se serializa correctamente. Si agrego un atributo serializable a la clase 'MyDataTable' - se serializa correctamente, pero me dicen que no es necesario si implemento ISerializable.

¿Puede alguien señalarme en la dirección correcta?

Respuesta

8

Quien te dijo que no es necesario añadir el SerializableAttribute es incorrecto:

aplica el atributo del SerializableAttribute incluso si la clase también implementa la interfaz ISerializable para controlar el proceso de serialización.

Y desde el ISerializable entrada (em añadido):

Cualquier clase que podrían ser serializado deben estar marcados con el SerializableAttribute. Si una clase necesita controlar su proceso de serialización, puede implementar la interfaz ISerializable.

+0

Gracias por su rápida respuesta. Mi prueba parece apoyar eso y los ejemplos que he encontrado en MSDN parecen estar de acuerdo también. –

1

Debe agregar SerializableAttribute, incluso si implementa ISerializable. Aunque esta discute una regla de FxCop, esto es de http://msdn.microsoft.com/en-us/library/ms182350(VS.80).aspx:

para ser reconocido por el tiempo de ejecución de lenguaje común como serializable, tipos deben estar marcados con el atributo SerializableAttribute incluso si el tipo utiliza una costumbre serialización rutina a través de la implementación de la interfaz ISerializable .

Cuestiones relacionadas