16

他の 2 つのクラスがネストされているクラス Resource があるシナリオがあります。アクションと ResourceURL。リソースとアクション用のカスタム xmlserializer を作成する必要がありますが、ResourceURL 用ではありません。両方に IXmlSerializable を実装しました。

問題は、リソースがシリアル化されているときに、Action.WriteXML(XmlWriter) を呼び出してシリアル化された形式のアクションを取得することですが、シリアル化された形式の 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 に答える