如何在我的web.config文件中存储字典对象?

我想在我的webconfiguration文件中存储一个简单的键/值string字典。 Visual Studio使存储string集合变得容易(请参阅下面的示例),但我不知道如何使用字典集合来完成此操作。

<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <string>value1</string> <string>value2</string> <string>value2</string> </ArrayOfString> 

为什么重新发明轮子? AppSettings部分专门用于在configuration文件中存储类似字典的数据。

如果您不想在AppSettings部分放置太多的数据,则可以按如下方式将相关值分组到自己的部分:

 <configuration> <configSections> <section name="MyDictionary" type="System.Configuration.NameValueFileSectionHandler,System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections> <MyDictionary> <add key="name1" value="value1" /> <add key="name2" value="value2" /> <add key="name3" value="value3" /> <add key="name4" value="value4" /> </MyDictionary> </configuration> 

您可以使用访问此集合中的元素

 using System.Collections.Specialized; using System.Configuration; public string GetName1() { NameValueCollection section = (NameValueCollection)ConfigurationManager.GetSection("MyDictionary"); return section["name1"]; } 

朱丽叶的答案是重点,但仅供参考,你也可以通过设置你的web.config文件,在外部的.config文件中添加额外的configuration,如下所示:

 <?xml version="1.0"?> <configuration> <configSections> <!-- blah blah the default stuff here --> <!-- here, add your custom section --> <section name="DocTabMap" type="System.Configuration.NameValueFileSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections> <!-- your custom section, but referenced in another file --> <DocTabMap file="CustomDocTabs.config" /> <!-- etc, remainder of default web.config is here --> </configuration> 

然后,你的CustomDocTabs.config如下所示:

 <?xml version="1.0"?> <DocTabMap> <add key="A" value="1" /> <add key="B" value="2" /> <add key="C" value="3" /> <add key="D" value="4" /> </DocTabMap> 

现在你可以通过代码访问它:

 NameValueCollection DocTabMap = ConfigurationManager.GetSection("DocTabMap") as NameValueCollection; DocTabMap["A"] // == "B" 

您将需要实现一个自定义部分(请参阅configuration部分devise器 )。

你真正想要的东西是接近这个的东西:

 <MyDictionary> <add name="Something1" value="something else"/> <add name="Something2" value="something else"/> <add name="Something3" value="something else"/> </MyDictionary> 

XmlAttribute“name”是一个Key,它不允许在后面的代码中有多个。 同时,确保Collection MyDictionary也是一个字典。

你可以用这个工具完成所有这些工作,并根据需要填补空缺。

在应用程序设置中,我们可以使用System.Collection.Specilized.StringCollection

 <X.Properties.Settings> <setting name="ElementsList" serializeAs="Xml"> <value> <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <string>Element1</string> <string>Element2</string> </ArrayOfString> </value> </setting> </X.Properties.Settings> 

访问列表:

 var element = Settings.Default.ElementsList[index] 

我不知道如何直接存储字典,但你可以很容易地使用string数组来存储字典。 对于每个键值对,您将键存储为第一个string,将值存储为第二个值。 那么当重build字典时,你可以撤销这个编码。

 static Dictionary<string,string> ArrayToDictionary(string[] data) { var map = new Dictionary<string,string>(); for ( var i= 0; i < data.Length; i+=2 ) { map.Add(data[i], data[i+1]); } return map; }