La gran diferencia es cuando se necesita decir XmlSerializer
sobre sub clases - por ejemplo:
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Car),
new Type[] { typeof(SportCar), typeof(Radio) });
Aquí, sin la información adicional si no hubiera conocido (sólo de Car
) sobre cualquiera SportCar
o Radio
- por lo que si se le da un objeto que es en realidad un SportCar
, que fracasaría:
Car car = new SportCar {...};
xmlSerializer.Serialize(destination, car);
también puede hacer esto establecer [XmlInclude(typeof(SportCar))]
contra la definición Car
Tipo:
[XmlInclude(typeof(SportCar))]
public class Car {...}
Esto es más fácil, pero sólo es posible si el tipo Car
se encuentra en un conjunto que sabe de SportCar
. Pero a menudo do saber esto, por lo que XmlInclude
es la opción preferida.
Además: hay algunos beneficios de eficiencia de XmlInclude
; detrás de escena, el sistema usa generación de tipo dinámica para hacer que XmlSerializer
sea eficiente. Por esta razón, generalmente debe mantener (y reutilizar) la instancia XmlSerializer
que cree; por ejemplo, al almacenarlo en un campo estático. Sin embargo, el sistema lo hace automáticamente para el uso predeterminado (new XmlSerializer(typeof(Car))
), es decir, no importa cuántas veces use este constructor, solo genera el código dinámico una vez. Si usa el constructor más complejo (new XmlSerializer(typeof(Car),new Type[] { typeof(SportCar), typeof(Radio) })
), generará el tipo cada vez.
¿Cuál es la diferencia en el resultado si especifico la información de la clase secundaria? (Soy nuevo en el proceso de serialización) – Anonymous
No hay diferencia en el resultado entre el uso del enfoque XmlInclude y el constructor (nuevo enfoque Type []); ellos son equivalentes Si no hace ninguna de las dos cosas, solicite un XmlSerializer (typeof (Car)), pero dele un SportCar, arrojará una excepción. –
Veo, después de leer el tema sobre XmlSerializer en C# 3.0 en pocas palabras y de vuelta para leer su respuesta que menciona "sobre las subclases" me hace entender cómo funciona XmlSerializer. (Compré otro libro para estudiar C#, qué lástima). – Anonymous