使用自定义XML配置文件在.NET桌面程序中保存设置

2023-09-20 19:55:49 浏览数 (2)

本文将详细介绍如何在.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-parser3.YAML(Yet Another Markup Language)•优点:简洁,易于阅读和编辑,支持复杂的数据结构,支持注释。•缺点:缩进敏感,可能导致错误。•相关类库:YamlDotNet

3. HackerScreenSaver 的配置选择

HackerScreenSaver 为了设计的小巧,根据合适原则和简单原则,我最终选择了不需要引入其他第三方的 XML 格式配置文件。

XML(eXtensible Markup Language)具有以下优点:

•可扩展性强,支持复杂的数据结构。•支持注释,便于理解和维护。•作为标准的数据交换格式,易于与其他系统集成。

以下是我们设计的一个简单的配置类 SimpleSetting,用于保存设置:

代码语言:javascript复制
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 对象,然后调用其 SaveLoad 方法即可。这样,我们就可以在.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

0 人点赞