重写属性上的.net XmlSerializer
我有一个带有抽象属性的基类:
public abstract int ID {get;set;}
现在,我有一个子类,它是XmlSerialized。 所以它有:
[XmlElement("something")] public override int ID { get { //... } set { //... } }
我无法将XmlElement属性移动到baseclass,因为每个子类都有不同的xml元素名称。
现在,当我反序列化这个类时,我收到以下错误:
成员’Subclass.ID’隐藏inheritance的成员’BaseClass.ID’,但具有不同的自定义属性。
我能做什么?
当重写的属性具有[XmlElement]
和[XmlAttribute]
属性时,通过添加[XmlIgnore]
属性,派生类型的序列化和反序列化将起作用。
基类可以是抽象的,因此它永远不会被实例化,因此被序列化或反序列化。
[Serializable] public abstract class Base { [XmlIgnore] public abstract Int32 ID { get; set; } }
使基类属性受保护且非抽象,然后为每个派生类提供根据基类属性实现的适当命名的属性:
// Base class protected int InternalID {get; set;} // Derived class [XmlElement] public int SomethingID { get {return InternalID;} set {InternalID = value;} }