2009-05-22 6 views
5

.NETにIXmlSerializableを実装するクラスがあります。私はそのプロパティをシリアル化したいが、複雑なタイプかもしれない。これらの複合型はXMLシリアル化と互換性がありますが、IXmlSerializable自体は実装されていません。私のReadXmlメソッドとWriteXmlメソッドから、私に渡されるXmlReader/XmlWriterのデフォルトの読み書きロジックを呼び出す方法を教えてください。カスタムXMLシリアル化メソッド内からデフォルトのXMLシリアル化を使用する方法

おそらくコードは、私が何をしたい、それがより明確になります:Writerの

public class MySpecialClass : IXmlSerializable 
{ 
    public List<MyXmlSerializableType> MyList { get; set; } 

    System.Xml.Schema.XmlSchema IXmlSerializable.GetSchema() 
    { 
     return null; 
    } 

    void IXmlSerializable.ReadXml(System.Xml.XmlReader reader) 
    { 
     // Read MyList from reader, but how? 
     // Something like this? 
     // MyList = (List<MyXmlSerializableType>) 
      reader.ReadObject(typeof(List<MyXmlSerializableType>)); 
    } 

    void IXmlSerializable.WriteXml(System.Xml.XmlWriter writer) 
    { 
     // Write MyList to writer, but how? 
     // Something like this? 
     // writer.WriteObject(MyList) 

    } 
} 
+0

Daniel、これについてさらに質問がありますか?私はあなたが答えを与えられたと思います。 –

+0

ReadSubtreeメソッドは、問題を解決するための鍵でした。現在の回答には、これを行う方法を正確に説明していないため、私は受け入れられたとマークしていません。 –

答えて

9

、あなたは自分のライターにそれを介してリストをシリアル化、その後、MySerializableTypeのためのXmlSerializerを作成することができます。

読者にとっても同様のアプローチがあります。 EDIT:リストのみを読み込み、リストが完了した後でストリームの最後の前に読み上げを停止するには、ReadSubTree(credit Marc Gravell)を使用する必要があります。

+2

最後のポイント:ReadSubtree:http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.readsubtree.aspx –

+0

ReadSubTree、cool!私は何か新しいことを学んだ! – Cheeso