本文將詳細(xì)介紹如何在.NET桌面程序中使用自定義的XML配置文件來保存和讀取設(shè)置。除了XML之外,我們還將探討其他常見的配置文件格式,如JSON、INI和YAML,以及它們的優(yōu)缺點(diǎn)和相關(guān)的NuGet類庫。最后,我們將重點(diǎn)介紹我們?yōu)楹芜x擇XML作為配置文件格式,并展示一個實(shí)用的示例。
在.NET桌面程序中,通常使用setting文件來保存程序的配置信息。使用setting文件的方法很簡單,只需在項(xiàng)目中添加一個setting文件,然后通過Properties.Settings.Default來獲取和保存設(shè)置即可。
我的開源項(xiàng)目 HackerScreenSaver[1] 之前就是使用這種方式,但是當(dāng)我在升級 Windows11 的內(nèi)核版本后,發(fā)現(xiàn)當(dāng)程序在被系統(tǒng)以屏保程序啟動后,無法加載配置了。
如此這般就需要使用其他方式來存儲配置文件了。畢竟,setting文件并非唯一可用于保存設(shè)置的方式。我們可以選擇存儲到注冊表,或者自己寫配置文件并保存。
對于一些簡單的配置我們甚至可以直接寫一個二進(jìn)制文件,當(dāng)然一般情況下我們還是選擇常見格式的配置文件,比如:JSON、INI 和 YAML。
1.JSON(JavaScript Object Notation) 格式?優(yōu)點(diǎn):易于閱讀和編寫,支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu),廣泛應(yīng)用于Web API和前端開發(fā)。?缺點(diǎn):根據(jù) JSON 規(guī)范,其是不支持注釋的(單獨(dú) Json 文件在某些編輯器可以正確解析注釋,在 .NET Core 中通過 JSON 配置提供程序讀取配置時,也可以在配置文件中添加注釋)。?相關(guān)類庫:Newtonsoft.Json
(建議使用自帶的 System.Text.Json
),可參考相關(guān)遷移教程[2]。2.INI(Initialization File)?優(yōu)點(diǎn):簡潔,易于閱讀和編輯,適用于存儲簡單的鍵值對。?缺點(diǎn):不支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和類型。?相關(guān)類庫:ini-parser
3.YAML(Yet Another Markup Language)?優(yōu)點(diǎn):簡潔,易于閱讀和編輯,支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu),支持注釋。?缺點(diǎn):縮進(jìn)敏感,可能導(dǎo)致錯誤。?相關(guān)類庫:YamlDotNet
HackerScreenSaver 為了設(shè)計(jì)的小巧,根據(jù)合適原則和簡單原則,我最終選擇了不需要引入其他第三方的 XML 格式配置文件。
XML(eXtensible Markup Language)具有以下優(yōu)點(diǎn):
?可擴(kuò)展性強(qiáng),支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。?支持注釋,便于理解和維護(hù)。?作為標(biāo)準(zhǔn)的數(shù)據(jù)交換格式,易于與其他系統(tǒng)集成。
以下是我們設(shè)計(jì)的一個簡單的配置類 SimpleSetting
,用于保存設(shè)置:
public class SimpleSetting
{
// 類的屬性和構(gòu)造函數(shù)省略...
/// <summary>
/// 從文件中讀取設(shè)置
/// </summary>
/// <param name="path">配置文件路徑</param>
public SimpleSetting(string path)
{
System.Xml.Serialization.XmlSerializer xs=new System.Xml.Serialization.XmlSerializer(typeof(SimpleSetting));
using (System.IO.FileStream fs=new System.IO.FileStream(path, System.IO.FileMode.Open))
{
SimpleSetting ss=(SimpleSetting)xs.Deserialize(fs);
isLocal=ss.isLocal;
uInfo=ss.uInfo;
Opacity=ss.Opacity;
autoExit=ss.autoExit;
}
}
/// <summary>
/// 保存設(shè)置到文件
/// </summary>
/// <param name="path">配置文件路徑</param>
public void Save(string path)
{
System.Xml.Serialization.XmlSerializer xs=new System.Xml.Serialization.XmlSerializer(typeof(SimpleSetting));
using (System.IO.FileStream fs=new System.IO.FileStream(path, System.IO.FileMode.Create))
{
xs.Serialize(fs, this);
}
}
}
SimpleSetting
類中包含了從XML文件中讀取設(shè)置和將設(shè)置保存到XML文件的方法。為了使用該類,我們只需要在程序中創(chuàng)建一個 SimpleSetting
對象,然后調(diào)用其 Save
和 Load
方法即可。這樣,我們就可以在.NET桌面程序中使用自定義的XML配置文件來保存設(shè)置了。
本文詳細(xì)介紹了如何在.NET桌面程序中使用自定義的 XML 配置文件以及為何選擇 XML 作為配置文件格式。同時,我們還探討了其他常見的配置文件格式,如 JSON、INI 和 YAML,以及它們的優(yōu)缺點(diǎn)和相關(guān)的 NuGet 類庫。希望這篇文章能幫助你找到適合你項(xiàng)目需求的配置文件解決方案!
[1]
HackerScreenSaver: https://github.com/sangyuxiaowu/HackerScreenSaver?wt.mc_id=DT-MVP-5005195[2]
相關(guān)遷移教程: https://learn.microsoft.com/zh-cn/dotnet/standard/serialization/system-text-json/migrate-from-newtonsoft?wt.mc_id=DT-MVP-5005195
本文將詳細(xì)介紹如何在.NET桌面程序中使用自定義的XML配置文件來保存和讀取設(shè)置。除了XML之外,我們還將探討其他常見的配置文件格式,如JSON、INI和YAML,以及它們的優(yōu)缺點(diǎn)和相關(guān)的NuGet類庫。最后,我們將重點(diǎn)介紹我們?yōu)楹芜x擇XML作為配置文件格式,并展示一個實(shí)用的示例。
在.NET桌面程序中,通常使用setting文件來保存程序的配置信息。使用setting文件的方法很簡單,只需在項(xiàng)目中添加一個setting文件,然后通過Properties.Settings.Default來獲取和保存設(shè)置即可。
我的開源項(xiàng)目 HackerScreenSaver[1] 之前就是使用這種方式,但是當(dāng)我在升級 Windows11 的內(nèi)核版本后,發(fā)現(xiàn)當(dāng)程序在被系統(tǒng)以屏保程序啟動后,無法加載配置了。
如此這般就需要使用其他方式來存儲配置文件了。畢竟,setting文件并非唯一可用于保存設(shè)置的方式。我們可以選擇存儲到注冊表,或者自己寫配置文件并保存。
對于一些簡單的配置我們甚至可以直接寫一個二進(jìn)制文件,當(dāng)然一般情況下我們還是選擇常見格式的配置文件,比如:JSON、INI 和 YAML。
1.JSON(JavaScript Object Notation) 格式?優(yōu)點(diǎn):易于閱讀和編寫,支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu),廣泛應(yīng)用于Web API和前端開發(fā)。?缺點(diǎn):根據(jù) JSON 規(guī)范,其是不支持注釋的(單獨(dú) Json 文件在某些編輯器可以正確解析注釋,在 .NET Core 中通過 JSON 配置提供程序讀取配置時,也可以在配置文件中添加注釋)。?相關(guān)類庫:Newtonsoft.Json
(建議使用自帶的 System.Text.Json
),可參考相關(guān)遷移教程[2]。2.INI(Initialization File)?優(yōu)點(diǎn):簡潔,易于閱讀和編輯,適用于存儲簡單的鍵值對。?缺點(diǎn):不支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和類型。?相關(guān)類庫:ini-parser
3.YAML(Yet Another Markup Language)?優(yōu)點(diǎn):簡潔,易于閱讀和編輯,支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu),支持注釋。?缺點(diǎn):縮進(jìn)敏感,可能導(dǎo)致錯誤。?相關(guān)類庫:YamlDotNet
HackerScreenSaver 為了設(shè)計(jì)的小巧,根據(jù)合適原則和簡單原則,我最終選擇了不需要引入其他第三方的 XML 格式配置文件。
XML(eXtensible Markup Language)具有以下優(yōu)點(diǎn):
?可擴(kuò)展性強(qiáng),支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。?支持注釋,便于理解和維護(hù)。?作為標(biāo)準(zhǔn)的數(shù)據(jù)交換格式,易于與其他系統(tǒng)集成。
以下是我們設(shè)計(jì)的一個簡單的配置類 SimpleSetting
,用于保存設(shè)置:
public class SimpleSetting
{
// 類的屬性和構(gòu)造函數(shù)省略...
/// <summary>
/// 從文件中讀取設(shè)置
/// </summary>
/// <param name="path">配置文件路徑</param>
public SimpleSetting(string path)
{
System.Xml.Serialization.XmlSerializer xs=new System.Xml.Serialization.XmlSerializer(typeof(SimpleSetting));
using (System.IO.FileStream fs=new System.IO.FileStream(path, System.IO.FileMode.Open))
{
SimpleSetting ss=(SimpleSetting)xs.Deserialize(fs);
isLocal=ss.isLocal;
uInfo=ss.uInfo;
Opacity=ss.Opacity;
autoExit=ss.autoExit;
}
}
/// <summary>
/// 保存設(shè)置到文件
/// </summary>
/// <param name="path">配置文件路徑</param>
public void Save(string path)
{
System.Xml.Serialization.XmlSerializer xs=new System.Xml.Serialization.XmlSerializer(typeof(SimpleSetting));
using (System.IO.FileStream fs=new System.IO.FileStream(path, System.IO.FileMode.Create))
{
xs.Serialize(fs, this);
}
}
}
SimpleSetting
類中包含了從XML文件中讀取設(shè)置和將設(shè)置保存到XML文件的方法。為了使用該類,我們只需要在程序中創(chuàng)建一個 SimpleSetting
對象,然后調(diào)用其 Save
和 Load
方法即可。這樣,我們就可以在.NET桌面程序中使用自定義的XML配置文件來保存設(shè)置了。
本文詳細(xì)介紹了如何在.NET桌面程序中使用自定義的 XML 配置文件以及為何選擇 XML 作為配置文件格式。同時,我們還探討了其他常見的配置文件格式,如 JSON、INI 和 YAML,以及它們的優(yōu)缺點(diǎn)和相關(guān)的 NuGet 類庫。希望這篇文章能幫助你找到適合你項(xiàng)目需求的配置文件解決方案!
[1]
HackerScreenSaver: https://github.com/sangyuxiaowu/HackerScreenSaver?wt.mc_id=DT-MVP-5005195[2]
相關(guān)遷移教程: https://learn.microsoft.com/zh-cn/dotnet/standard/serialization/system-text-json/migrate-from-newtonsoft?wt.mc_id=DT-MVP-5005195