2009-05-06 11 views
8

Tengo que implementar ISerializable en una clase derivada (para hacer una serialización/deserialización personalizada) pero la clase principal está marcada como [Serializable]. La serialización "funciona" (puedo serializar y deserializar sin errores de tiempo de ejecución) pero parece que los datos de la clase base no se conservan.Si implemento ISerializable en una clase secundaria, ¿los padres también tienen que hacerlo?

¿Es el hecho de que estoy implementando GetObjectData en la clase derivada anulando la serialización de la clase base? Si es así, ¿tengo que implementar ISerializable en la clase base y luego llamar a base.GetObjectData (...) en la clase derivada para preservar los datos o hay una manera mejor que escribir info.AddValue (...) 100 veces ?

editar> Gracias Tim. Usted confirmó lo que sospechaba. El problema en sí va un paso más allá. La clase base en mi caso implementa BindingList (T) que no implementa ISerializable.

Mientras tanto, para cada propiedad, intentaré: En el constructor de ISerializable base.Property = info.GetValue (...);

y en GetObjectDate info.AddValue ("nombre", base.Property);

a menos que la maravillosa comunidad SO presente una solución mejor.

Respuesta

6

tengo que poner en práctica ISerializable en la clase base y luego llamar base.GetObjectData (...) en la clase derivada

Sí. Tan pronto como implemente ISerializable, cualquier serialización automática se desactivará.

Del mismo modo, deberá implementar el constructor de serialización protegido tanto en la clase base como en la clase derivada.

+1

Muy buena información, pero ¿qué hago si mi clase base hereda de BindingList (T) - que no implementa ISerializable (pero está marcado como [Serializable])? –

+0

En el pasado he abordado esto agregando código a mi propio constructor de serialización y al método GetObjectData. –

+0

Sí, según mi edición, creo que eso es lo que he decidido hacer también. Solo esperaba una solución más elegante que esta. –

Cuestiones relacionadas