2009-12-02 25 views
20

Tengo toda una lista de las clases de entidad que necesito para hacer Serializable (debido a almacenar el estado de sesión en SQL, pero eso es otra historia).Si la clase Base está marcada Serializable ¿están todas las clases secundarias marcadas también?

He añadido el atributo [Serializable] y todo parece estar bien.

Todas mis clases de entidad se extienden desde la misma clase base. Si me marca la clase base como Serializable, ¿significa esto que todos los niños se marcan como Serializable también?

Gracias

Respuesta

32

No, el atributo no es heredado.

Al extender la clase, es posible agregar características que pueden no ser serializables por naturaleza, por lo tanto .NET Framework no puede suponer que todo lo que amplía la clase base serializable también es serializable.

Es por eso que usted debe indicar explícitamente [Serializable] atributo en cada clase individual.

+1

Gracias, que tenga sentido, y gracias por la rápida respuesta :) – Russell

6

No, cada uno tendrá que ser marcado como [Serializable] específicamente.

Además, si tiene la intención de serializar un objeto a XML que es de tipo derivado, como si fuera el tipo base, también necesitará un atributo [XmlInclude].

Ejem:

[Serializable] 
public class BaseClass : ParentClass 
{ 
} 

[Serializable] 
[XmlInclude(typeof(BaseClass))] 
public class ParentClass 
{ 
} 

(serialización binaria, al igual que lo que se utiliza para las sesiones, no necesitan esto)

+0

La serialización es hecho por ASP .net para el estado de la sesión SQL, así que no estoy seguro de si necesito el XmlInclude, pero gracias. – Russell

+0

Ah, el XmlInclude es solo para la serialización xml (que no se usa para el estado de la sesión). Debí haberme perdido esa parte cuando leí tu pregunta. – fyjham

Cuestiones relacionadas