Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在.config文件中收集配置节_C#_Web Config_Configurationsection - Fatal编程技术网

C# 如何在.config文件中收集配置节

C# 如何在.config文件中收集配置节,c#,web-config,configurationsection,C#,Web Config,Configurationsection,我希望能够在我的app/web.config文件中使用以下设置: <listeners> <listener type="a"> <parameter name="a", value="2" /> <parameter name="b", value="20" /> </listener> <listener type="b"> <param

我希望能够在我的app/web.config文件中使用以下设置:

<listeners>
    <listener type="a">
         <parameter name="a", value="2" />
         <parameter name="b", value="20" />
    </listener>
    <listener type="b">
         <parameter name="a", value="2" />
         <parameter name="b", value="20" />
         <parameter name="c", value="200" />
    </listener>
    ...
</listeners>

...
基本上,我想表示一个监听器集合,其中每个监听器都有几个属性和一个参数集合。我已经将listener元素建模为ConfigurationSection,参数为ConfigurationElements。但是,我找不到如何创建监听器外部集合的示例。我需要做什么来建模


我尝试将侦听器设置为ConfigurationSectionGroup,但在运行时失败,因为该组似乎不能有多个同名的节。

这可能是一种逃避,因为它不使用任何自定义处理程序,但您可以将任意XML节与XmlSerializer结合使用

  <section name="listeners" type="System.Configuration.DefaultSection" />
  ...

<listeners>
  <listener type="a">
    <parameter name="a" value="2" />
    <parameter name="b" value="20" />
  </listener>
  <listener type="a">
    <parameter name="a" value="2" />
    <parameter name="b" value="20" />
    <parameter name="c" value="200" />
  </listener>
</listeners>
此外,行动本身:

var serializer = new XmlSerializer(typeof(Listener[]), 
                                   new XmlRootAttribute("listeners"));
var configuration = ConfigurationManager
    .OpenExeConfiguration(ConfigurationUserLevel.None);
var section = configuration.GetSection("listeners");
var rawXml = section.SectionInformation.GetRawXml();
using (var stringReader = new StringReader(rawXml))
{
    var listeners = (Listener[])serializer.Deserialize(stringReader);
}
(或者,您可以使用XDocument来解析XML并查看单个元素或属性,而不是XmlSerializer。)

var serializer = new XmlSerializer(typeof(Listener[]), 
                                   new XmlRootAttribute("listeners"));
var configuration = ConfigurationManager
    .OpenExeConfiguration(ConfigurationUserLevel.None);
var section = configuration.GetSection("listeners");
var rawXml = section.SectionInformation.GetRawXml();
using (var stringReader = new StringReader(rawXml))
{
    var listeners = (Listener[])serializer.Deserialize(stringReader);
}