这可能是一种逃避,因为它不使用任何自定义处理程序,但您可以将任意 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>
要获取侦听器数组,请获取原始 XML 并在需要对象时对其进行反序列化。
可序列化的类:
public class Parameter
{
[XmlAttribute("name")]
public String Name { get; set; }
[XmlAttribute("value")]
public Int32 Value { get; set; }
}
[XmlType(TypeName = "listener")]
public class Listener
{
[XmlAttribute("type")]
public String Type { get; set; }
[XmlElement("parameter")]
public Parameter[] Parameters;
}
而且,操作本身:
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。)