Mam klasę podstawową z właściwością wirtualną i typem pochodnym, która zastępuje właściwość wirtualną. Typ może być serializowany do XML. Co staram się zrobić, to NIE utrzymywać właściwości List of items, gdy obiekt jest typu pochodnego. Aby to osiągnąć, klasa pochodna dekoruje nadpisaną właściwość z atrybutem [XmlIgnore]
. Właściwość wirtualna w klasie bazowej NIE stosuje atrybutu XmlIgnore
. Z jakiegoś powodu lista elementów jest przekształcana do postaci szeregowej, nawet gdy obiekt jest typu pochodnego (DynamicCart
).Ignorowanie właściwości na klasach pochodnych przy użyciu XmlSerializer .NET
Po zastosowaniu atrybutu XmlIgnore
do właściwości wirtualnej w klasie bazowej lista nie zostanie przekształcona do pliku.
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>);
}
Wygląda na to, że sam odpowiedziałeś na to pytanie. –
Wdrożyłem pracę, ale nie jestem odpowiedzią na moje pytanie, dlaczego XMLSerializer nie honoruje atrybutu [XMLIgnore] w klasie z podziałem na klasy i zawiera obiekt List, gdy serializuję DynamicCart? –
Ken