Игнорирование свойств производных классов при использовании .NET XmlSerializer

У меня есть базовый класс с виртуальным свойством и производным типом, который переопределяет виртуальное свойство. Тип может быть сериализован в XML. Я пытаюсь НЕ сохранять свойство List of items, когда объект имеет производный тип. Чтобы добиться этого, производный класс украшает переопределенное свойство атрибутом [XmlIgnore] . Виртуальное свойство в базовом классе НЕ применяет атрибут XmlIgnore . По какой-то причине список элементов сериализуется каждый раз, даже если объект имеет производный тип ( DynamicCart ).

Когда я применяю атрибут XmlIgnore к виртуальному свойству в базе class список не сериализуется в файл.

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>);
}
7
задан Drew Noakes 24 July 2015 в 10:30
поделиться