16

我有一个场景,其中我有一个 Resource 类,其中嵌套了另外两个类;操作和资源 URL。我需要为 Resource 和 Action 而不是为 ResourceURL 编写自定义 xmlserializer。我为两者实现了 IXmlSerializable。

问题是,当 Resource 被序列化时,我调用 Action.WriteXML(XmlWriter) 来获取 Action 的序列化形式,但我无法获得 ResourceURL 的序列化形式。标签变得一团糟,它还添加了一个标签。

那么我如何序列化一个对象,该对象对某些嵌套对象具有客户序列化但对其他对象没有序列化?

4

1 回答 1

22

这是一个示例 WriteXml 方法:

    void IXmlSerializable.WriteXml(XmlWriter writer)
    {
        // Simple string value:
        writer.WriteAttributeString("Name", this.Name);

        // Object without IXmlSerializable implementation:
        writer.WriteStartElement("NonCustomObject");
        new XmlSerializer(NonCustomObjectType).Serialize(writer, this.NonCustomObject);
        writer.WriteEndElement();

        // Object with IXmlSerializable implementation:
        writer.WriteStartElement("CustomObject");
        (this.CustomObject as IXmlSerializable).WriteXml(writer);
        writer.WriteEndElement();
    }

下面是一个对应的 ReadXml 方法:

    void IXmlSerializable.ReadXml(XmlReader reader)
    {
        // Simple string value
        this.Name = reader.GetAttribute("Name");

        // Object without IXmlSerializable implementation here:
        reader.ReadStartElement();
        if (reader.Name == "NonCustomObject")
        {
            reader.ReadStartElement();
            this.NonCustomObject = new XmlSerializer(NonCustomObjectType).Deserialize(reader);
            reader.ReadEndElement();
        }

        // Object with IXmlSerializable implementation here:
        reader.ReadStartElement();
        if (reader.Name == "CustomObject")
        {   
            (this.CustomObject as IXmlSerializable).ReadXml(reader);
            reader.ReadEndElement();
        }
    }
于 2011-09-17T14:27:28.853 回答