2011-02-04 9 views
17

que tienen una clase base abstracta con una propiedad:.net XmlSerializer en las propiedades sobrescritos

public abstract int ID {get;set;} 

ahora yo tengo una subclase, que se XmlSerialized. Por lo tanto, se tiene:

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

no me puedo mover el atributo XmlElement a la clase base, ya que cada subclase tendrá un elementname XML diferente.

Ahora, cuando Deserialize esta clase me sale el siguiente error:

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

¿Qué puedo hacer yo?

+0

Considere el uso de la palabra clave 'nueva' en la declaración de propiedad, que puede resolver su problema. –

Respuesta

29

serialización y deserialización de tipos derivados funciona cuando el anulado las propiedades tienen atributos [XmlElement] y [XmlAttribute], al agregar un atributo [XmlIgnore].

La clase base se puede hacer abstracta para que nunca pueda ser instanciada y, por lo tanto, ser serializada o deserializada.

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

hacer que la propiedad de la clase base protegida y no abstracta, a continuación, dar a cada clase derivada de una propiedad apropiado nombre implementado en cuanto a la propiedad de la clase base:

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

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

Pero la clase base necesita implementar una interfaz ... Esa es la razón por la cual tiene una propiedad de ID. – TDaver

Cuestiones relacionadas