Tengo una clase con algunas colecciones en ellas, y me gustaría serializar las instancias de esta clase a XML sin tener que inicializar las colecciones para que estén vacías, y sin tener que implementar IXmlSerializable. No me importa si crea elementos vacíos, o no crea los elementos en absoluto. Solo que funciona sin tener que inicializar una colección para cada propiedad basada en colección.Serv. XML .NET y colecciones nulas
He visto todos los atributos XML con los que puedo decorar las propiedades, y no he tenido éxito con esto. Esto parece una cosa simple de hacer que puede tener un elemento o simplemente no tener ninguno. Luego, cuando se deserialice, simplemente los dejará nulos o los ignorará.
Aquí hay una versión simple de una clase para usar para resolver este problema. Al usar esto y los valores predeterminados, se obtiene una excepción "Referencia de objeto no establecida en una instancia de un objeto" debido a que las colecciones son nulas;
public class MyClass
{
public string Name { get; set; }
public bool IsAlive { get; set; }
public List<Car> Cars { get; set; }
public List<Home> Homes { get; set; }
public List<Pet> Pets { get; set; }
public void ToXmlFile(string fileName)
{
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
TextWriter writer = new StreamWriter(fileName);
serializer.Serialize(writer, this);
writer.Close();
}
}
EDITAR Gracias por la ayuda a los hombres, resulta que el problema estaba en mi método GetHashCode que no manejan la hipótesis nula correctamente. Una vez que arreglé esto, todo estuvo bien. Marqué el primero para responder como correcto. Perdón por el Red Herring, pero trabajando con ustedes ayudaron.
¿Y cuál es el problema? Eso debería funcionar (serializar y deserializar al menos); ¿Qué comportamiento es lo que no te gusta? –
No pude reproducir la excepción que dice obtener. Pude serializar y deserializar una instancia de tu MyClass exacta como la diste. Tal vez hay algo más pasando? –
@Brian Sí, algo más estaba pasando, gracias por toda la ayuda rápida y porque no era el código XML en sí. :) –