我正在使用.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>
答案 0 :(得分:5)
在自定义配置元素类中,您需要覆盖方法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;
}
}
我必须解决同样的问题。
答案 1 :(得分:4)
在ConfigurationElement子类中,尝试使用XmlWriter.WriteCData覆盖SerializeElement来编写数据,并使用XmlReader.ReadContentAsString覆盖DeserializeElement以将其读回。