Как включить раздел CDATA в элемент ConfigurationElement? - PullRequest
8 голосов
/ 08 января 2009

Я использую .NET Fx 3.5 и написал свои собственные классы конфигурации, которые наследуются от ConfigurationSection / ConfigurationElement. В настоящее время я получаю что-то похожее в моем файле конфигурации:

<blah.mail>
    <templates>
        <add name="TemplateNbr1" subject="..." body="Hi!\r\nThis is a test.\r\n.">
            <from address="blah@hotmail.com" />
        </add>
    </templates>
</blah.mail>

Я хотел бы иметь возможность выразить тело как дочерний узел template (который является узлом add в приведенном выше примере), чтобы в итоге получилось что-то похожее на:

<blah.mail>
    <templates>
        <add name="TemplateNbr1" subject="...">
            <from address="blah@hotmail.com" />
            <body><![CDATA[Hi!
This is a test.
]]></body>
        </add>
    </templates>
</blah.mail>

Ответы [ 2 ]

5 голосов
/ 21 января 2009

В вашем пользовательском классе элементов конфигурации вам нужно переопределить метод OnDeserializeUnrecognizedElement.

Пример:

public class PluginConfigurationElement : ConfigurationElement
{
    public NameValueCollection CustomProperies { get; set; }

    public PluginConfigurationElement()
    {
        this.CustomProperties = new NameValueCollection();
    }

    protected override bool OnDeserializeUnrecognizedElement(string elementName, XmlReader reader)
    {
        this.CustomProperties.Add(elementName, reader.ReadString());
        return true;
    }
}

Мне пришлось решить ту же проблему.

4 голосов
/ 17 января 2009

В вашем подклассе ConfigurationElement попробуйте переопределить SerializeElement, используя XmlWriter.WriteCData, чтобы записать ваши данные, и переопределить DeserializeElement, используя XmlReader.ReadContentAsString, чтобы прочитать их обратно.

...