Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用ConfigurationManager存储结构化数据?_C#_.net_Configurationmanager - Fatal编程技术网

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

C# 如何使用ConfigurationManager存储结构化数据?,c#,.net,configurationmanager,C#,.net,Configurationmanager,我可以使用.Net ConfigurationManager存储字符串,但如何存储结构化数据 例如,我可以这样做: conf = ConfigurationManager.OpenExeConfiguration(...) string s = "myval"; conf.AppSettings.Settings["mykey"].Value = s; conf.Save(ConfigurationSaveMode.Modified); 我想这样做: class myclass { pu

我可以使用.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的建议实现了一个解决方案。但接下来的困难是为配置创建一个新的部分。这是如何做到的:

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

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


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

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

MSDN:

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

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

这就是我要找的。我想,也许配置管理器有某种内置的序列化功能…不确定序列化,我喜欢自定义配置部分的方法是能够指定默认值,具有强类型的解决方案,清晰易读的配置文件true!不知道JavaScriptSerializer类。和你一样,我现在也经常使用JSON。从现在起,使用这样一个有用的类对我来说将是非常诱人的。:-)