如何在自定义XML序列化方法中使用默认XML序列化

Dan*_*ted 5 .net c# xml-serialization

我在.NET中有一个实现IXmlSerializable的类.我想序列化它的属性,但它们可能是复杂的类型.这些复杂类型与XML序列化兼容,但它们本身并不实现IXmlSerializable.从我的ReadXml和WriteXml方法,我如何调用传递给我的XmlReader/XmlWriter上的默认读/写逻辑.

也许代码会让我更清楚我想要的东西:

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)

    }
}
Run Code Online (Sandbox Code Playgroud)

Che*_*eso 10

对于编写器,您可以为MySerializableType创建一个XmlSerializer,然后通过它将列表序列化到您的编写器.

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
}
Run Code Online (Sandbox Code Playgroud)

读者有类似的方法. 编辑:要仅读取列表,并在列表完成后停止读取,但在流结束之前,您需要使用ReadSubTree(信用Marc Gravell).

  • 最后一点:ReadSubtree:http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.readsubtree.aspx (2认同)