Tengo una clase base con una propiedad virtual y un tipo derivado que anula la propiedad virtual. El tipo se puede serializar a XML. Lo que trato de hacer es NO persistir en la propiedad Lista de elementos cuando el objeto es del tipo derivado. Para lograr esto, la clase derivada decora la propiedad anulada con el atributo [XmlIgnore]
. La propiedad virtual en la clase base NO aplica el atributo XmlIgnore
. Por algún motivo, la Lista de elementos se serializa incluso cuando el objeto es del tipo derivado (DynamicCart
).Ignorar propiedades en las clases derivadas al usar XmlSerializer de .NET
Cuando aplique el atributo XmlIgnore
a la propiedad virtual en la clase base, la lista no se serializa en el archivo.
public class ShoppingCart
{
public virtual List<items> Items{get; set;}
//and other properties
public void SerializeToXML (string filePath)
{
var xmlSerializer = new XmlSerializer(this.GetType());
textWriter = new System.IO.StreamWriter(filePath);
xmlSerializer.Serialize(textWriter, this);
textWriter.Flush();
textWriter.Close();
}
}
//A cart that is populated by algo based on parameters supplied by user. I have no need to
//persist the actual items across sessions.
class DynamicCart: ShoppingCart
{
[XmlIgnore]
public override List<items>{get;set;}
//and other properties
}
class Shop
{
ShoppingCart cart = new DynamicCart();
PopulateCart(cart);
cart.serializeToXML(<PATH TO FILE>);
}
Parece que usted respondió la pregunta usted mismo. –
He implementado una solución pero no una respuesta a mi pregunta, ¿por qué XMLSerializer no respeta el atributo [XMLIgnore] en la clase serive e incluye el objeto List cuando serializo DynamicCart? –
Ken