2009-05-22 16 views
5

Mam klasę .NET, która implementuje IXmlSerializable. Chcę serializować jego właściwości, ale mogą to być typy złożone. Te złożone typy byłyby kompatybilne z serializacją XML, ale same nie implementują IXmlSerializable. Z moich metod ReadXml i WriteXml, jak wywołać domyślną logikę odczytu/zapisu w XmlReader/XmlWriter, który jest mi przekazywany.Jak korzystać z domyślnej serializacji XML z niestandardowych metod serializacji XML

Może kod uczyni go bardziej zrozumiałym, co chcę:

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, masz więcej pytań na ten temat? Myślę, że dostałeś odpowiedź. –

+0

Metoda ReadSubtree była kluczem do rozwiązania problemu. Nie zaznaczono obecnej odpowiedzi jako zaakceptowanej, ponieważ nie wyjaśnia dokładnie, jak to zrobić. –

Odpowiedz

9

Dla pisarza, można po prostu utworzyć XmlSerializer dla MySerializableType, następnie serializacji listy przez niego do pisarza.

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 
} 

Podobne podejście dla czytelnika. EDYCJA: Aby odczytać tylko listę i zatrzymać czytanie po zakończeniu listy, ale przed końcem strumienia musisz użyć ReadSubTree (kredyt Marc Gravell).

+2

Powtórz ostatni punkt: ReadSubtree: http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.readsubtree.aspx –

+0

ReadSubTree, fajnie! Nauczyłem się czegoś nowego! – Cheeso

Powiązane problemy