2011-02-04 7 views
17

私は抽象プロパティを持つ基本クラスを持っています。だから、それはありますの.NETのXmlSerializerは

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

すべてのサブクラスは異なるXML要素名を持つことになりますので、私は、基底クラスへのXmlElement属性を移動することはできません。

Member 'Subclass.ID' hides inherited member 'BaseClass.ID', but has different custom attributes.

私は何を行うことができます。私はこのクラスをデシリアライズするとき

は今、私は次のエラーを取得しますか?

+0

プロパティの宣言で 'new'キーワードを使用すると、問題が解決する場合があります。 –

答えて

29

シリアライズとデシリアライズの作品プロパティは、[XmlIgnore]属性を追加して、[XmlElement][XmlAttribute]の属性を持ちます。

基本クラスを抽象化することで、インスタンス化することができず、したがってシリアル化またはデシリアライズできないようにすることができます。

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

その後、各派生クラスに、基本クラスのプロパティの面で実装され、適切という名前のプロパティを与え、基本クラスのプロパティが保護され、非抽象ください:オーバーライドされると、派生型の

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

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

しかし基本クラスはインターフェイスを実装する必要があります...それがIDプロパティを持つ理由のすべてです。 – TDaver

関連する問題