如何在我的 web.config 文件中存储字典对象?
Posted
技术标签:
【中文标题】如何在我的 web.config 文件中存储字典对象?【英文标题】:How do I store a dictionary object in my web.config file? 【发布时间】:2010-09-25 04:37:22 【问题描述】:我想在我的网络配置文件中存储一个简单的键/值字符串字典。 Visual Studio 使存储字符串集合变得容易(参见下面的示例),但我不确定如何使用字典集合来存储。
<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>
【问题讨论】:
【参考方案1】:为什么要重新发明***? AppSettings 部分专为在配置文件中存储类似字典的数据而设计。
如果您不想在 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"];
【讨论】:
这是我需要的。现在,作为一个 VB 程序员,我想把它放到 web.config 的 MySettings 部分! @TGnat,你的 webprojects 中有 my.settings 吗?我不。我认为在 winform-projects 中 app.config 和 my.settings 是相互同步的。 是的,我在问题中包含的代码示例是从 web.config 中的 My.Setting 复制的。 我尝试在我的项目中使用上面的代码,但是当我将它包含在我的 元素之后时遇到了问题。将自定义内容移到 appSettings 上方似乎可以解决问题(不知道为什么)。此外,我能够删除完整的类型名称,只使用 type="System.Configuration.NameValueFileSectionHandler"。 我认为正确的方法调用是 ConfigurationManager.GetSection("MyDictionary")。【参考方案2】:朱丽叶的回答是正确的,但仅供参考,您还可以通过如下设置 web.config
将其他配置放入外部 .config
文件中:
<?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"
【讨论】:
这是一个很好的观点。然而,一项调整不是指定属性“file”,而是只能使用属性“configSource”。例如您需要实现一个自定义部分(请参阅Configuration Section Designer)。
你真正想要的……是这样的:
<MyDictionary>
<add name="Something1" value="something else"/>
<add name="Something2" value="something else"/>
<add name="Something3" value="something else"/>
</MyDictionary>
XmlAttribute“名称”是一个键,它不允许在后面的代码中有多个。同时,确保 Collection MyDictionary 也是 Dictionary。
您可以使用此工具完成所有这些工作,并根据需要填补空白。
【讨论】:
您不能使用键属性而不是名称吗? 我知道我在 appsettings-section 中有几个我在网站中使用的变量。【参考方案4】:在应用程序设置中我们可以使用 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]
【讨论】:
这不是字典。【参考方案5】:我不确定如何直接存储字典,但您可以轻松地使用字符串数组来存储字典。对于每个键值对,您将键保存为第一个字符串,将值保存为第二个。然后在重建字典时,您可以撤消此编码。
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;
【讨论】:
以上是关于如何在我的 web.config 文件中存储字典对象?的主要内容,如果未能解决你的问题,请参考以下文章
在 web.config 或 app.config 中存储分层应用程序设置
如何从 .tt 文件(T4 模板)中读取来自 web.config 的 appSetting