本文将详细介绍如何在.NET桌面程序中使用自定义的XML配置文件来保存和读取设置。除了XML之外,我们还将探讨其他常见的配置文件格式,如JSON、INI和YAML,以及它们的优缺点和相关的NuGet类库。最后,我们将重点介绍我们为何选择XML作为配置文件格式,并展示一个实用的示例。
1. 背景
在.NET桌面程序中,通常使用setting文件来保存程序的配置信息。使用setting文件的方法很简单,只需在项目中添加一个setting文件,然后通过Properties.Settings.Default来获取和保存设置即可。
我的开源项目 HackerScreenSaver[1] 之前就是使用这种方式,但是当我在升级 Windows11 的内核版本后,发现当程序在被系统以屏保程序启动后,无法加载配置了。
如此这般就需要使用其他方式来存储配置文件了。毕竟,setting文件并非唯一可用于保存设置的方式。我们可以选择存储到注册表,或者自己写配置文件并保存。
2. 常见的配置文件格式
对于一些简单的配置我们甚至可以直接写一个二进制文件,当然一般情况下我们还是选择常见格式的配置文件,比如:JSON、INI 和 YAML。
1.JSON(JavaScript Object Notation) 格式•优点:易于阅读和编写,支持复杂的数据结构,广泛应用于Web API和前端开发。•缺点:根据 JSON 规范,其是不支持注释的(单独 Json 文件在某些编辑器可以正确解析注释,在 .NET Core 中通过 JSON 配置提供程序读取配置时,也可以在配置文件中添加注释)。•相关类库:Newtonsoft.Json
(建议使用自带的 System.Text.Json
),可参考相关迁移教程[2]。2.INI(Initialization File)•优点:简洁,易于阅读和编辑,适用于存储简单的键值对。•缺点:不支持复杂的数据结构和类型。•相关类库:ini-parser
3.YAML(Yet Another Markup Language)•优点:简洁,易于阅读和编辑,支持复杂的数据结构,支持注释。•缺点:缩进敏感,可能导致错误。•相关类库:YamlDotNet
3. HackerScreenSaver 的配置选择
HackerScreenSaver 为了设计的小巧,根据合适原则和简单原则,我最终选择了不需要引入其他第三方的 XML 格式配置文件。
XML(eXtensible Markup Language)具有以下优点:
•可扩展性强,支持复杂的数据结构。•支持注释,便于理解和维护。•作为标准的数据交换格式,易于与其他系统集成。
以下是我们设计的一个简单的配置类 SimpleSetting
,用于保存设置:
public class SimpleSetting
{
// 类的属性和构造函数省略...
/// <summary>
/// 从文件中读取设置
/// </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>
/// 保存设置到文件
/// </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文件中读取设置和将设置保存到XML文件的方法。为了使用该类,我们只需要在程序中创建一个 SimpleSetting
对象,然后调用其 Save
和 Load
方法即可。这样,我们就可以在.NET桌面程序中使用自定义的XML配置文件来保存设置了。
4. 最后
本文详细介绍了如何在.NET桌面程序中使用自定义的 XML 配置文件以及为何选择 XML 作为配置文件格式。同时,我们还探讨了其他常见的配置文件格式,如 JSON、INI 和 YAML,以及它们的优缺点和相关的 NuGet 类库。希望这篇文章能帮助你找到适合你项目需求的配置文件解决方案!
References
[1]
HackerScreenSaver: https://github.com/sangyuxiaowu/HackerScreenSaver?wt.mc_id=DT-MVP-5005195
[2]
相关迁移教程: https://learn.microsoft.com/zh-cn/dotnet/standard/serialization/system-text-json/migrate-from-newtonsoft?wt.mc_id=DT-MVP-5005195