如何获取配置元素

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)


maj*_*tor 0

我终于找到了一种方法来做到这一点。

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 声明它不会从框架的未来版本中删除,因为它是内部使用的。