有没有比普通的.settings文件更高级的保存应用程序设置的常用方法

本文关键字:应用程序 保存 设置 方法 常用 高级的 文件 settings 有没有 | 更新日期: 2023-09-27 18:22:11

有一个大型的WPF应用程序,包含多个模块、窗口、自写控件等。我们需要为用户界面的一些元素保持状态。例如:

  • 窗口布局
  • 控件布局
  • 最后接受的输入
  • 各种网格的状态(列的可见性、宽度、顺序)

.设置文件对此似乎过于简单,因为其中没有层次结构。为什么我不能序列化一些SettingsModel,包含我需要的一切,然后在应用程序启动时恢复它?持久性机制的一个非常重要的要求是它应该是可扩展的:如果我重构设置结构,并尝试反序列化用以前版本的SettingsModel类创建的文件,我显然会失败。

因此,问题是:有什么框架可以持久化复杂的设置吗?

有没有比普通的.settings文件更高级的保存应用程序设置的常用方法

正如Rachel所建议的,您可以使用XML序列化,我总是将其用于设置,它对更改有一定的容忍度,但我不知道它是否能满足您的所有需求。

.Settings文件支持随着时间的推移更改结构。您甚至不需要使用Settings.cs文件,您可以创建自己的设置提供程序,并从配置文件中填充它们,每个设置提供程序都有自己的自定义升级方法来处理结构中的更改。

app.config是另一个常见的存储位置。配置文件设置可以从应用程序轻松访问,您甚至可以构建自己的自定义configSections

我通过将自己的序列化代码写入XML,标记元素以匹配配置字段来实现这一点。当我反序列化时,我会为要填充的每个元素查询XML。如果我将旧版本反序列化为具有附加元素的新配置方案,XML查询将返回null,而我将插入一个默认值。它允许我处理分层数据的列表,我可以对其中的任何部分进行加密,而且我不会对XML进行版本化。虽然它比使用XMLSerializer要多做一些工作,但我的配置数据不会经常更改,所以这是值得的

由于可能有很多用户,因此可以将每个用户的XML保存为数据库中的字符串。System.Data.Sqlite、RaptorDb和FileDb以及PersistentDictionary都能很好地实现这一点。

另一种选择是将数据存储在字典的字典中,并使用SharpSerializer将其作为XML保存到文件或上述数据库之一。