【发布时间】:2011-07-13 14:15:41
【问题描述】:
我有一个带有虚拟属性的基类和一个覆盖虚拟属性的派生类型。该类型可以序列化为 XML。当对象是派生类型时,我要做的不是保留项目列表属性。为了实现这一点,派生类使用[XmlIgnore] 属性装饰被覆盖的属性。基类中的虚拟属性不应用 XmlIgnore 属性。由于某种原因,即使对象是派生类型 (DynamicCart),项目列表也会被序列化。
当我将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>);
}
【问题讨论】:
-
看来你自己回答了这个问题。
-
我已经实现了一个解决方法,但没有回答我的问题,为什么 XMLSerializer 在序列化 DynamicCart 时不遵守服务类中的 [XMLIgnore] 属性并包含 List
对象?
标签: .net inheritance virtual overriding xmlserializer