[.NET] : 自定义Configuration区段的未定义Attribute读写

前言 :

我们在撰写自定义 Configuration时,会先定义好对应的自定义 ConfigurationSection 与 Config档让程序代码知道该如何颇析数据。

<sample propertyA="Clark001">
  <propertyCollectionB>
    <add name="Clark002" value="Clark003" />
  </propertyCollectionB>    
</sample>
public class SampleSection : ConfigurationSection
{
    [ConfigurationProperty("propertyA")]
    public string PropertyA
    {
        get
        {
            return (string)base["propertyA"];
        }
        set
        {
            base["propertyA"] = value;
        }
    }

    [ConfigurationProperty("propertyCollectionB")]
    public NameValueConfigurationCollection PropertyCollectionB
    {
        get
        {
            return (NameValueConfigurationCollection)base["propertyCollectionB"];
        }
    }  
}

但是当我们的 Config档为下列XML,其中 propertyC的 Attribute是不固定数量与名称的时候。
上列的实作方法无法满足这样的需求。

<sample propertyA="Clark001">
  <propertyCollectionB>
    <add name="Clark002" value="Clark003" />
  </propertyCollectionB>
  <propertyC A="Clark004" B="Clark005" />
</sample>

本篇文章描述,如何使用程序代码来完成这样的需求。

注意 :

在 Microsoft Visual Studio IDE除错环境下,执行程序写入.config时。
程序写入的将会是*.vshost.exe.config,而不是预期中的 *.exe.config。
并且程序执行结束之后,IDE会覆盖*.vshost.exe.config成为写入前的状态。
因此会误认为程序执行失败。

只要编译完毕之后,
点选bin目录底下的*.exe,再去检查*.exe.config,就可以看到预期中的结果。

相关资料 :

[ASP.NET]撰写自己的 Configuration 区段 Part 1 : http://www.dotblogs.com.tw/regionbbs/archive/2009/05/08/custom_configuration_section_in_web_config.aspx
[ASP.NET]撰写自己的 Configuration 区段 Part 2 : http://www.dotblogs.com.tw/regionbbs/archive/2009/09/17/orgainzeyoursectionintogroupforconfiguration.aspx
[ASP.NET]撰写自己的 Configuration 区段 Part 3 : http://www.dotblogs.com.tw/regionbbs/archive/2009/10/09/customconfigurationelementcollection.aspx
[.NET] : 自定义Configuration区段的资料写入 : http://www.dotblogs.com.tw/clark/archive/2010/12/23/20338.aspx

实作 :

档案下载 : Clk.ConfigurationSample2.zip

项目加入或引用 UnrecognizedAttributeConfigurationElement、UnrecognizedAttributeDictionary
image
image

自定义ConfigurationSection
image

设定.Config
image

写入程序
image

执行结果
image
image

后记 :

自定义Configuration区段,使用UnrecognizedAttributeConfigurationElement、UnrecognizedAttributeDictionary。
来做未定义的Attribute读取跟写入,其实蛮方便的 :D。

原文地址:https://www.cnblogs.com/clark159/p/2205145.html