您的位置:首页 > 编程语言 > C#

C# 自定义config文件中的节点

2015-08-28 11:59 507 查看
class ServerSection : ConfigurationSection
{
private static readonly ConfigurationProperty s_property
= new ConfigurationProperty(string.Empty, typeof(MethodSectionCollection), null,
ConfigurationPropertyOptions.IsDefaultCollection);

[ConfigurationProperty("", Options = ConfigurationPropertyOptions.IsDefaultCollection)]
public MethodSectionCollection KeyValues
{
get
{
return (MethodSectionCollection)base[s_property];
}
}
}

[ConfigurationCollection(typeof(MethodValueSetting))]
public class MethodSectionCollection : ConfigurationElementCollection        // 自定义一个集合
{
// 基本上,所有的方法都只要简单地调用基类的实现就可以了。

public MethodSectionCollection()
: base(StringComparer.OrdinalIgnoreCase)    // 忽略大小写
{
}

// 其实关键就是这个索引器。但它也是调用基类的实现,只是做下类型转就行了。
new public MethodValueSetting this[string name]
{
get
{
return (MethodValueSetting)base.BaseGet(name);
}
}

// 下面二个方法中抽象类中必须要实现的。
protected override ConfigurationElement CreateNewElement()
{
return new MethodValueSetting();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((MethodValueSetting)element).Method;
}

// 说明:如果不需要在代码中修改集合,可以不实现Add, Clear, Remove
public void Add(MethodValueSetting setting)
{
this.BaseAdd(setting);
}
public void Clear()
{
base.BaseClear();
}
public void Remove(string name)
{
base.BaseRemove(name);
}
}

public class MethodValueSetting : ConfigurationElement    // 集合中的每个元素
{
[ConfigurationProperty("method", IsRequired = true)]
public string Method
{
get { return this["method"].ToString(); }
set { this["method"] = value; }
}

[ConfigurationProperty("url", IsRequired = true)]
public string MethodUrl
{
get { return this["url"].ToString(); }
set { this["url"] = value; }
}
}

配置文件中 Conf开头处添加:

<configSections>
<section name="自定义节点类名" type="命名空间.自定义节点类名, 命名空间"/>
</configSections>

在程序中调用:

MethodSection methodConfig = (MethodSection)System.Configuration.ConfigurationManager.GetSection("MethodSection");
foreach(MethodValueSetting method in methodConfig.KeyValues)
{
MethodCollection.Add(method.Method, method.MethodUrl);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: