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

class B : A 
{ 
    public string X; 
} 

私がB型のオブジェクトをシリアル化するとき、Aのみがシリアル化されます。最小限の労力でXを含めるにはどうすればよいですか?XMLのシリアル化と継承

+1

はあなたを行います本当にIXmlSerializableを実装する必要がありますか?非常に特殊で珍しいスキーマにシリアル化しない限り、XmlSerializerはほとんどの状況を単独で処理できます –

+0

はい、IXmlSerializableを実装する必要があります。 – watbywbarif

+0

なぜですか?あなたはA:Dictionary <...>のために、属性を適用してほとんどすべてを達成することができます。 – Andrey

答えて

3

あなたがIXmlSerializableを実装しようとしている事実は、それが少し難しくなります...あなたは何ができるか

WriteXmlReadXml仮想を作成し、あなたの派生クラスでそれらをオーバーライドします:

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 
    } 
}