2009-05-22 75 views
5

我在.NET中有一個實現IXmlSerializable的類。我想序列化它的屬性,但它們可能是複雜的類型。這些複雜類型將與XML序列化兼容,但它們本身不實現IXmlSerializable。從我的ReadXml和WriteXml方法中,如何調用傳遞給我的XmlReader/XmlWriter上的默認讀/寫邏輯。如何使用自定義XML序列化方法中的默認XML序列化

也許代碼將使其更清晰我想要什麼:

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

丹尼爾,你有更多的問題嗎?我想你已經得到了答案。 – 2009-07-26 15:40:05

+0

ReadSubtree方法是解決問題的關鍵。我沒有將當前答案標記爲已接受,因爲它沒有解釋如何做到這一點。 – 2009-07-29 17:57:42

回答

9

對於作家,你可以只創建一個XmlSerializer爲MySerializableType,然後通過它序列列表,你的作家。

void IXmlSerializable.WriteXml(System.Xml.XmlWriter writer) 
{ 
    // write xml decl and root elts here 
    var s = new XmlSerializer(typeof(MySerializableType)); 
    s.Serialize(writer, MyList); 
    // continue writing other elts to writer here 
} 

讀者也有類似的方法。 編輯:要只讀取列表,並且在列表完成後但在流結束之前停止閱讀,則需要使用ReadSubTree(信貸Marc Gravell)。