0

XmlSerializerを使用して構成ファイルを逆シリアル化します。Xml要素の子コンテンツを文字列フィールドにフェッチできるようにしたい。この子コンテンツは、xml自体にすることができます。

簡単な例:

public class Configuration
{
    [XmlAttribute]
    public string MyAttribute { get; set; }

    [XmlText]
    public string Content { get; set; }
}

私は以下を解析しようとしています:

<Configuration MyAttribute="foo">
    <SomeOtherXml />
</Configuration>

Contentプロパティをに設定したいのです"<SomeOtherXml />"が、これを機能させることができないようです。CDATAなどの中にコンテンツをカプセル化したくありません。

これは可能ですか、それとも構成ファイルの解析を手動で処理する必要がありますか?

ありがとう

4

1 に答える 1

1

XmlSerializerを使用することは可能ですが、手動で解析する必要があるため、最終的には価値がない可能性があります。

これを行うには他のより良い方法があるかもしれませんが、これを行うために私が見つけた方法は、ConfigurationクラスにIXmlSerializableインターフェイスを実装させることです。

public class Configuration : IXmlSerializable
{
    [XmlAttribute]
    public string MyAttribute { get; set; }

    [XmlText]
    public string Content { get; set; }

    public void ReadXml(XmlReader reader)
    {
        if(reader.NodeType == XmlNodeType.Element &&
           string.Equals("Configuration", reader.Name, StringComparison.OrdinalIgnoreCase))
        {
            MyAttribute = reader["MyAttribute"];
        }

        if(reader.Read() &&
           reader.NodeType == XmlNodeType.Element &&
           string.Equals("SomeOtherXml", reader.Name, StringComparison.OrdinalIgnoreCase))
        {
            Content = reader.ReadOUterXml();  //Content = "<SomeOtherXml />"
        }
    }

    public void WriteXml(XmlWriter writer) { }
    public XmlSchema GetSchema() { }
}

お役に立てれば。

于 2011-02-16T18:51:16.747 に答える