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

时间:2012-02-02 18:10:10

标签: c# wpf

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

  • windows layout;
  • 控制布局;
  • 最后接受的输入;
  • 各种网格的状态(列的可见性,宽度,顺序)

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

所以静止的是:是否有任何框架可以保持复杂的设置?

4 个答案:

答案 0 :(得分:3)

正如Rachel建议的那样,你可以使用XML serialization,我总是将其用于设置,它对变化有一定的容忍度,但我不知道它是否符合你的所有需求。

答案 1 :(得分:2)

.Settings文件支持changing the structure over time。您甚至不需要使用Settings.cs文件,您可以创建自己的settings providers并从配置文件填充它们,每个文件都有自己的自定义升级方法来处理结构中的更改。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我通过将自己的序列化代码写入XML来标记元素以匹配配置字段。当我反序列化时,我查询XML以查找我想要填充的每个元素。如果我将旧版本反序列化为具有其他元素的新配置方案,则XM​​L查询返回null,而是插入默认值。它可以让我处理分层数据列表,我可以加密我需要的任何部分,而且我不会对XML进行版本控制。虽然它比使用XMLSerializer更有用,但我的配置数据不会经常变化,因此值得。

由于您可以拥有大量用户,因此可以将每个用户的XML保存为数据库中的字符串。 System.Data.SqliteRaptorDbFileDb效果良好,PersistentDictionary也是如此。

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