Я использую .NET Fx 3.5 и написал свои собственные классы конфигурации, которые наследуются от ConfigurationSection / ConfigurationElement. В настоящее время я получаю что-то вроде этого в моем файле конфигурации:
<blah.mail>
<templates>
<add name = "TemplateNbr1" subject = "..." body = "Hi!\r\nThis is a test.\r\n.">
<from address = "[email protected]" />
</add>
</templates>
</blah.mail>
Я хотел бы иметь возможность выразить тело как дочерний узел template (который является узлом add в приведенном выше примере), чтобы получить что-то вроде:
<blah.mail>
<templates>
<add name = "TemplateNbr1" subject = "...">
<from address = "[email protected]" />
<body><![CDATA[Hi!
This is a test.
]]></body>
</add>
</templates>
</blah.mail>





В подклассе ConfigurationElement попробуйте переопределить SerializeElement с помощью XmlWriter.WriteCData для записи ваших данных и переопределить DeserializeElement с помощью XmlReader.ReadContentAsString, чтобы прочитать его обратно.
В вашем пользовательском классе элемента конфигурации вам необходимо переопределить метод 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;
}
}
Мне пришлось решить ту же проблему.
Я не думаю, что это работает в .NET 4.5. Исключение создается до того, как будут выполнены эти переопределения.
Спасибо, я попробую!