起首,我们先在设置文件内里写以下自定义节点:
<!-- 运用自定义节点和上面的自定义处置惩罚顺序--> <mailServerGroup provider="www.baidu.com"> <mailServer client="http://blog.csdn.net/lhc1105"> <address>13232@qq.com</address> <userName>lhc</userName> <password>2343254</password> </mailServer> <mailServer client="http://www.cnblogs.com/liuhuichao/"> <address>132345232@qq.com</address> <userName>水田如雅</userName> <password>2343453254</password> </mailServer> </mailServerGroup>
然后写对应类举行处置惩罚:
namespace MailHandlerClass { public class MailServer { //存储mailServer的子节点(<address>13232@qq.com</address><userName>lhc</userName><password>2343254</password>)的值 //以及client的值 private Hashtable serverNode; //组织函数 public MailServer() { serverNode = new Hashtable(); } public Hashtable ServerNode { get { return serverNode; } } public string client { get { return serverNode["client"] as string; } } public string Address { get { return serverNode["address"] as string; } } public string UserName { get { return serverNode["userName"] as string; } } public string PassWord { get { return serverNode["password"] as string; } } } //对应mailServerGroup public class MailServerConfig : List<MailServer> { //映照provider值 public string Provider { get; set; } } //自定义设置节点mailServerGroup的处置惩罚顺序 public class MailServerConfigurationHandler : IConfigurationSectionHandler { //section为MailServerGroup节点 public object Create(object parent, object configContext, System.Xml.XmlNode section) { //设置要领返回设置对象,能够是任何范例 MailServerConfig config = new MailServerConfig(); //猎取节点的属性信息 config.Provider = section.Attributes["provider"] == null ? "" : section.Attributes["provider"].Value; //猎取MailServer节点 foreach (System.Xml.XmlNode child in section.ChildNodes) { MailServer server = new MailServer(); //增加Client属性 if (child.Attributes["client"]!=null) { server.ServerNode.Add("client", child.Attributes["client"].Value); } //猎取MailServer下的Name,username,password节点 foreach (System.Xml.XmlNode grandChild in child.ChildNodes) { //增加文本 server.ServerNode.Add(grandChild.Name, grandChild.InnerText); } //将server到场MailServerConfig config.Add(server); } return config; } } }
实在从代码能够看出,自定义处置惩罚类的完成思绪照样用hashtable来完成key-value的读取与存储+对XML的处置惩罚;
以后,我们在设置文件中将上面的类和节点关联起来:
<configuration> <!--定义处置惩罚mailServerGroup设置节的类--> <configSections> <section name="mailServerGroup" type="MailHandlerClass.MailServerConfigurationHandler,完成IConfigurationSectionHandler接口"/> <!--【注重】type:指定用来实行以下操纵的设置节处置惩罚顺序类的称号:处置惩罚在 name 属性中指定的节或元素中的设置设置。运用以下花样:type=" Fully qualified class name , assembly file name , version , culture , public key token "定义必需婚配顺序集援用。--> </configSections>
肯定要注重type指定值时参数的位置!!!!!不然会涌现加载不上处置惩罚顺序的毛病。
写段代码测试下:
namespace MailHandlerClass { //也能够经由过程继续ConfigurationSection类来完成 class Program { static void Main(string[] args) { MailServerConfig mailServerConfig = (MailServerConfig)ConfigurationManager.GetSection("mailServerGroup"); //读取节点值 mailServerConfig.ForEach(m => { Console.WriteLine(m.client+";"+m.Address+";"+m.UserName+";"+m.PassWord); }); } } }
额,实在照样发起强转改成as啥的情势。
实在设置文件刚开始看起来是如许的:
然则学完以后,你再看设置文件,就变成了如许的:
以上就是.Net——完成IConfigurationSectionHandler接口定义处置惩罚顺序处置惩罚自定义节点的内容,更多相关内容请关注ki4网(www.ki4.cn)!