System.Configuration相对于XMLSerializer有什么好处?

时间:2014-02-03 14:13:46

标签: c# serialization configuration

当我想保存配置时,我通常使用XMLSerializer。它易于使用且易于理解。最后,您只需将反序列化的对象强制转换为某种类型。而已。完美。

现在我必须学习整个System.Configuration-thing,我也不知道从哪里开始,也不知道它到底是做什么的。很多东西都有“章节”,“映射”和诸如此类的东西。我该如何处理? MSDN文章再次没有解释我正在做什么。做一件非常简单的事情似乎有很多不必要的开销。

1 个答案:

答案 0 :(得分:0)

您是在谈论应用程序配置类中的自定义部分吗? here it is described when derived from MS Configuration section

还可以定义自己的自定义配置节处理程序IConfigurationSectionHandler,它将获取XML并将其反序列化为某个类值

如果您想获得更具体的答案,请提出更具体的问题

UPD 要从ConfigurationSection派生时从配置文件加载,可以使用如下代码

Configuration config;
config = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
var _current = (ClassSettings)config.GetSection(sectionName);

如果您使用了自定义配置节处理程序(IConfigurationSectionHandler),则可以使用以下代码加载类实例:

var database = (DatabaseSettings)ConfigurationManager.GetSection(databaseSettingsName);

遗憾的是,写入配置文件更加棘手。

MS建议this way更新配置文件内容

或者您可以像任何其他XML文档一样打开配置文件,并像其他任何XML文档一样更新它:

XmlDocument config = new XmlDocument();
string configName = Assembly.GetExecutingAssembly().Location + ".config";
config.Load(configName);
XmlNode databaseNode = config.DocumentElement.SelectSingleNode(sectionName + "/" + DatabaseName);
if (databaseNode != null)
{
    databaseNode.Attributes[Database.PasswordName].Value = value.Database.PasswordEnc;
}
//another nodes changes are skipped
config.Save(configName);

但是,您可以使用Protect section方法加密配置文件中的部分:

var config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
ConfigurationSection section = config.Sections[sectionName];
if (section != null)
{
    var info = section.SectionInformation;
    var pr = info.IsProtected;
    if (pr)
        info.UnprotectSection();
    res = GetSettingsSection<T>(sectionName, value);
    if (!pr)
    {
        info.ProtectSection("DataProtectionConfigurationProvider");
        config.Save();
    }
}

还可以打开像XML这样的配置文件,序列化你的设置类实例,并用新的替换旧元素(config部分)。

不幸的是,我不能说使用MS app.config样式有很多好处。这是一个更多的抽象层和一些附加功能(保护/取消保护部分从用户或机器商店加载文件等等。

对于ASP应用程序,组合配置文件 - 可以使用app web.config扩展maching web.config设置。

对于小winforms应用程序我更喜欢使用JSON序列化配置文件 - 它不包含任何开销,如MS app.config并且没有XMLSerializer问题(如性能)