2010-12-14 22 views
2
class A : IXmlSerializable 
{  ... 
} 

class B : A 
{ 
    public string X; 
} 

Lorsque je sérialise un objet de type B, seul A est sérialisé. Comment puis-je inclure X avec un minimum d'effort?Sérialisation XML et héritage

+1

-vous vraiment besoin d'implémenter IXmlSerializable? Sauf si vous êtes en train de sérialiser un schéma très spécifique et inhabituel, XmlSerializer peut gérer la plupart des situations par lui-même –

+0

Oui, j'ai vraiment besoin d'implémenter IXmlSerializable. – watbywbarif

+0

pourquoi? vous pouvez réaliser presque tout en appliquant des attributs – Andrey

Répondre

3

Le fait que vous implémentez IXmlSerializable rend un peu plus difficile ...

Ce que vous pouvez faire est virtuelle WriteXml et ReadXml, et les remplacer dans votre classe dérivée:

public class A : IXmlSerializable 
{ 
    public virtual void WriteXml (XmlWriter writer) 
    { 
     // Serialize A members 
    } 

    public virtual void ReadXml (XmlReader reader) 
    { 
     // Deserialize A members 
    } 

    public XmlSchema GetSchema() 
    { 
     return(null); 
    } 


} 


public class B : A 
{ 
    public override void WriteXml (XmlWriter writer) 
    { 
     base.WriteXml(writer); 

     // Serialize B members 
    } 

    public virtual void ReadXml (XmlReader reader) 
    { 
     base.ReadXml(reader); 

     // Deserialize B members 
    } 
}