maj*_*tor 6 c# configuration app-config web-config
直升机
谁能解释我如何从.config文件中获取配置元素.我知道如何处理属性而不是元素.例如,我想解析以下内容:
<MySection enabled="true">
<header><![CDATA[ <div> .... </div> ]]></header>
<title> .... </title>
</MySection>
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的c#代码看起来像这样:
public class MyConfiguration : ConfigurationSection
{
[ConfigurationProperty("enabled", DefaultValue = "true")]
public bool Enabled
{
get { return this["enabled"].ToString().ToLower() == "true" ? true : false; }
}
[ConfigurationProperty("header")]
public string header
{
???
}
}
Run Code Online (Sandbox Code Playgroud)
它适用于属性,如何处理元素(上面代码中的标题属性)?
小智 6
还有另一种方法可以做同样的事情.
我们可以通过重写DeserializeElement方法来创建一个元素来获取字符串值:
public class EmailTextElement : ConfigurationElement {
public string Value { get; private set; }
protected override void DeserializeElement(XmlReader reader, bool s) {
Value = reader.ReadElementContentAs(typeof(string), null) as string;
}
}
Run Code Online (Sandbox Code Playgroud)
我终于找到了一种方法来做到这一点。
IConfigurationSectionHandler 接口可以实现我想要的功能。需要人写方法
public object Create(object parent, object configContext, XmlNode section)
Run Code Online (Sandbox Code Playgroud)
之后,您自己解析部分,这样我就可以毫无问题地获取 XmlElement 了:
header = s["header"] != null ? s["header"].InnerText : String.Empty;
title = s["title"] != null ? s["title"].InnerText : String.Empty;
Run Code Online (Sandbox Code Playgroud)
这样做的缺点是接口已经过时,但 MSDN 声明它不会从框架的未来版本中删除,因为它是内部使用的。