Custome XmlSerialization嵌套/子对象 [英] Custome XmlSerialization for nested / child objects

查看:151
本文介绍了Custome XmlSerialization嵌套/子对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有,我有一个类资源有嵌套在它的其他两个类的情形; Action和ResourceURL。我需要编写自定义XmlSerializer的资源与行动而不是ResourceURL。我实现IXmlSerializable的两个。

I have a scenario in which I have a class Resource which has two other classes nested in it; Action and ResourceURL. I need to write custom xmlserializer for Resource and Action but not for ResourceURL. I implemented IXmlSerializable for both.

现在的问题是,当资源是系列化,我所说的Action.WriteXML(XmlWriter的),以获得行动的序列化形式,但我可以'吨得到ResourceURL的序列化形式。这种标签成为全乱了,它也增加了一个标签。

The problem is, when Resource is serialized, i call the Action.WriteXML(XmlWriter) to get the serialized form of Action, but i can't get serialized form of ResourceURL. The tags become all messed up and it also adds an tag.

让我怎么序列化有客户serilzation一些嵌套的对象,但不是为别人对象?

So how do i serialize an object which has customer serilzation for some nested objects but not for others?

推荐答案

下面是一个简单的WriteXml方法:

Here is a sample WriteXml method:

    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方法:

Here is a corresponding ReadXml method:

    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();
        }
    }

这篇关于Custome XmlSerialization嵌套/子对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆