如何使用ConfigurationManager存储结构化数据?

时间:2013-03-13 10:41:32

标签: c# .net configurationmanager

我可以使用.Net ConfigurationManager来存储字符串,但是如何存储结构化数据呢?

例如,我可以这样做:

conf = ConfigurationManager.OpenExeConfiguration(...)
string s = "myval";
conf.AppSettings.Settings["mykey"].Value = s;
conf.Save(ConfigurationSaveMode.Modified);

我想这样做:

class myclass {
   public string s;
   int i;
   ... more elements
};

myclass c = new myclass(); c.s = "mystring"; c.i = 1234; ...

conf.AppSettings.Settings["mykey"] = cc;
conf.Save(ConfigurationSaveMode.Modified);

如何使用ConfigurationManager存储和检索结构化数据?

我实施了@sll建议的解决方案。但是,困难在于为配置创建一个新的部分。这是如何做到的: How to Write to a User.Config file through ConfigurationManager?

2 个答案:

答案 0 :(得分:2)

您可以通过继承ConfigurationSection类来创建自己的配置节类型,并使用它来保存/加载任何自定义类型信息。

MSDN:How to: Create Custom Configuration Sections Using ConfigurationSection

BTW,一个可能对您或其他人有帮助的建议:一个好处是制作自定义配置部分类immutable(没有公共设置者),因此您可以确保在任何应用阶段都无法更改配置生命周期,但是如果您决定为依赖于配置节类的代码编写单元测试并且需要具有一些测试值的节存根,那么由于没有设置器,您可能会坚持设置属性值。解决方案是提供一个新类,它继承自您的节类,并使用受保护的索引器在构造函数值中指定,如下所示:

public class TestSectionClass: MyConfigurationSection
{
    public TestSectionClass(string testUserName)
    {
        this["userName"] = testUserName;
    }
}

答案 1 :(得分:1)

Serialization

有许多不同的序列化数据的方法,所以你需要选择一个。但是.NET提供了一个适合很多情况的序列化API,并且最近在使用Web AJAX调用时,我发现自己大量使用JavaScriptSerializer来转换为JSON。但是,还有第三方库,例如protobuf-net,等等。

这里的关键是基本上将您的数据转换为字节或字符串表示形式,以后可以在以后将其反序列化回原始结构,允许您将它存储在介质之间,例如配置文件或通过网络传输等。

根据@sll的回答,.NET有另一个方面意味着它可以处理自定义配置部分内外数据的序列化;是否要为此目的明确指定类型是您的电话。底线是相同的,序列化,不知何故。