2011-05-30 15 views
6

Tengo clase A hereda de la clase B. Tengo una lista de la clase que contiene BA y B artículos:XML serializando una lista de una clase base

List<B> myList = new List<B>(); 
myList.Add(new A()); 

Cuando intento para serializar esta lista usando XmlSerializable, se produce una excepción. Si defino la lista como de tipo B, entonces no obtengo esta excepción. ¿Cuál es la mejor manera de serializar la clase derivada?

Respuesta

7

XmlIncludeAttribute hará el truco.
Si va a esta url, encontrará una muestra de código allí también.

Además, en el ejemplo, el atributo se aplica al método, pero es posible que desee aplicarlo clase A en su caso.

+0

Gracias de nuevo ... me has ahorrado un gran dolor de cabeza. Estuve atascado todo el día en algunos aspectos raros de la serialización :) una nota relacionada - dado que el serializable pasa por llamar al get en cada miembro público - ¿hay algún tipo de obtención condicional? Pregunto porque también lo uso para encuadernar, así que mi get/set cambia las propiedades y, por lo tanto, la segunda vez que 'establece' (desde deserializar) no es lo que originalmente se esperaba que entrara en el conjunto – Steve

+0

lo llamaría 'condicional' accesors '(¿es eso posible?) – Steve

+0

No estoy seguro de haber entendido la pregunta. En la serialización ejecuta 'get' en todas sus propiedades públicas (también campos). En la deserialización, crea un objeto a través del constructor predeterminado y luego llama a 'set' en cada propiedad. –

Cuestiones relacionadas