私は、仮想プロパティと仮想プロパティをオーバーライドする派生型を持つ基本クラスを持っています。型はXMLにシリアライズできます。私がやろうとしているのは、オブジェクトが派生型である場合、List of itemsプロパティを保持しないことです。これを達成するために、派生クラスは[XmlIgnore]
属性でオーバーライドされたプロパティを装飾します。基本クラスの仮想プロパティはXmlIgnore
属性を適用しません。オブジェクトが派生型(DynamicCart
)であっても、何らかの理由でアイテムのリストが毎回シリアル化されます。.NETのXmlSerializerを使用する場合、派生クラスのプロパティを無視します。
属性をXmlIgnore
属性を基本クラスの仮想プロパティに適用すると、リストはファイルにシリアル化されません。
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>);
}
あなた自身が質問に答えたようです。 –
DynamicCartをシリアル化するときにXMLSerializerがserivedクラスの[XMLIgnore]属性を受け入れず、Listオブジェクトを含むのはなぜですか? –
Ken