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

本文关键字:结构化 数据 存储 何使用 ConfigurationManager | 更新日期: 2023-09-27 18:03:52

我可以使用。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建议的解决方案。但难点在于如何在结构中创建一个新的部分。这是如何做到的:如何写入用户。通过ConfigurationManager配置文件?

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

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

MSDN:如何:使用ConfigurationSection创建自定义配置节

BTW,一个可能对你或其他人有帮助的建议:一件好事是使自定义配置节类不可变(没有公共setter),这样你就可以确保配置不能在应用程序生命周期的任何阶段被改变,但是如果你决定为依赖于配置节类的代码编写单元测试,并且需要带有一些测试值的节存根,你可能会因为没有setter而无法设置属性值。解决方案是提供一个新类,它继承自您的节类,并在构造函数中使用受保护的索引器指定值,如下所示:

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

序列化。

有许多不同的序列化数据的方法,所以您需要选择一种。但是。net提供了一个适合很多情况的序列化API,最近在处理web AJAX调用时,我发现自己大量使用JavaScriptSerializer将内容转换为JSON。然而,也有第三方库,如protobuf-net等。

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

根据@sll的回答,.NET有另一个方面意味着它可以处理自定义配置段内外的数据序列化;是否要为此目的开始显式指定类型取决于您的决定。底线是一样的,序列化,以某种方式。