簡體   English   中英

與XMLSerializer相比,System.Configuration有什么好處?

[英]What are the benefits of System.Configuration over XMLSerializer?

當我要保存配置時,通常使用XMLSerializer。 它易於使用且易於理解。 最后,您只需將反序列化的對象轉換為某種類型。 而已。 完善。

現在,我必須學習整個System.Configuration-thing,而且我也不知道從哪里開始,也不知道它的確切作用。 帶有“部分”,“映射”之類的東西很多。 我該如何處理? 同樣,MSDN-Articles並不能解釋我在做什么。 似乎要做一件非常簡單的事情會產生很多不必要的開銷。

您是否在談論應用程序配置類中的自定義部分? 此處描述是從“ MS配置”部分獲得的

也可以定義自己的自定義配置節處理程序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建議采用這種方式來更新配置文件內容

或者,您可以像打開其他任何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);

但是,您可以使用保護節方法來加密配置文件中的節:

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之類的配置文件,序列化您的設置類實例,並用新的替換舊的元素(配置部分)。

不幸的是,我不能說使用MS app.config樣式有很多好處。 這是另外一個抽象層和一些其他功能(保護/取消保護用戶或計算機存儲區中的加載文件等)。

對於ASP應用程序,組合了配置文件-可以使用應用程序web.config擴展maching web.config設置。

對於小型winforms應用程序,我更喜歡使用JSON序列化的配置文件-它不包含MS app.config之類的開銷,並且沒有XMLSerializer問題(例如性能)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM