C# 如何在.config文件中收集配置节
我希望能够在我的app/web.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
<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);
}