我有一个app.config部分我想定义,作为一个简单的IDictionary<string, IDictionary<string, string>>
在app.config文件中看起来像这样:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="ServiceInstances" type="MyProject.Configuration, MyProject"/>
</configSections>
<ServiceInstances>
<ServiceInstance name="service1">
<kvp key="key1" value="value1"/>
<kvp key="key2" value="value2"/>
</ServiceInstance>
<ServiceInstance name="service2">
<kvp key="key3" value="value3"/>
<kvp key="key2" value="value2"/>
</ServiceInstance>
</ServiceInstances>
</configuration>
我所看到的所有教程似乎都深入探讨了这一点,我只是在寻找一种快速而肮脏的方法来实现这一目标:
IDictionary<string, string> foo = Configuration.GetDictionary("service1");
IDictionary<string, string> bar = Configuration.GetDictionary("service2");
看起来这应该是几行代码,但教程似乎不必要地使它变得复杂。对此有一个快速的答案,如果有,有人可以告诉我它应该是什么样的吗?
答案 0 :(得分:2)
首先,将XML文件解析为Dictionary<string, Dictionary<string, string>>
。看起来像这样:
public Dictionary<string, Dictionary<string, string>> getDictionary()
{
XmlDocument doc = new XmlDocument();
doc.Load(@"path/to/file.xml");
Dictionary<string, Dictionary<string, string>> outer = new Dictionary<string, Dictionary<string, string>>();
Dictionary<string, string> inner;
//cycle through outer nodes
foreach (XmlNode service in doc.SelectNodes("/configuration/ServiceInstances/ServiceInstance"))
{
inner = new Dictionary<string, string>();
//cycle through inner nodes
foreach (XmlNode kvp in service.SelectNodes("kvp"))
{
inner.Add(kvp.Attributes["key"].Value, kvp.Attributes["value"].Value);
}
outer.Add(service.Attributes["name"].Value, inner);
}
return outer;
}
然后你可以这样打电话给你的词典:
var foo = getDictionary();
Dictionary<string,string> bar = foo["service1"];
答案 1 :(得分:1)
您可以使用“配置”部分设计器执行脏作业:
它有视觉工作室设计师支持,生成示例配置,到目前为止只有一个问题 - 在VS2012的情况下需要安装VS2010,但我认为很快就会修复。