2011-02-04 11 views
17

Mam klasy bazowej z własności Streszczenie:.NET XmlSerializer na właściwości przesłoniętych

public abstract int ID {get;set;} 

Teraz mam podklasę, która jest XmlSerialized. Tak, to ma:

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

nie mogę przesunąć atrybut XMLELEMENT do klasy bazowej, ponieważ każda podklasa będzie miał inny xml ElementName.

Teraz, kiedy deserializowania tej klasy pojawia się następujący błąd:

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

Co mogę zrobić?

+0

Należy rozważyć użycie słowa kluczowego "new" w deklaracji właściwości, co może rozwiązać problem. –

Odpowiedz

29

serializacji i deserializacji typów pochodnych działa, gdy nadpisane właściwości mają atrybuty [XmlElement] i [XmlAttribute], przez dodanie atrybutu [XmlIgnore].

Klasę podstawową można uczynić abstrakcyjną, aby nigdy nie można było utworzyć instancji, a tym samym serializować ani deserializować.

0

Bądź chroniony obiekt klasy bazowej, a nie abstrakcyjny, następnie dać każdej klasie pochodnej odpowiednio nazwany mienia realizowanych w zakresie właściwości klasy bazowej:

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

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

Ale klasa podstawowa musi implementować interfejs ... To jest cały powód, dla którego ma właściwość ID. – TDaver

Powiązane problemy