重写属性上的.net XmlSerializer

时间:2011-02-04 12:53:57

标签: c# .net attributes xml-serialization override

我有一个带抽象属性的基类:

public abstract int ID {get;set;}

现在,我有一个子类,它是XmlSerialized。所以,它有:

[XmlElement("something")]
public override int ID {
get { //... }
set { //... }
}

我无法将XmlElement属性移动到baseclass,因为每个子类都有不同的xml元素名。

现在,当我反序列化这个类时,我收到以下错误:

  

成员'Subclass.ID'隐藏继承   成员'BaseClass.ID',但有   不同的自定义属性。

我该怎么办?

2 个答案:

答案 0 :(得分:36)

派生类型的序列化和反序列化在被覆盖的属性具有[XmlElement][XmlAttribute]属性时通过添加[XmlIgnore]属性而起作用。

基类可以是抽象的,因此它永远不会被实例化,因此被序列化或反序列化。

[Serializable]
public abstract class Base
{
    [XmlIgnore]
    public abstract Int32 ID { get; set; }
}

答案 1 :(得分:-1)

使基类属性受保护且非抽象,然后为每个派生类提供一个根据基类属性实现的适当命名属性:

// Base class
protected int InternalID {get; set;}

// Derived class
[XmlElement]
public int SomethingID
{
  get {return InternalID;}
  set {InternalID = value;}
}