有一个大型WPF应用程序,包含多个模块,窗口,自编写控件等。 我们需要为用户界面的某些元素保持状态。例如:
。设置文件似乎太简单了,因为它没有层次结构。
为什么我不能序列化一些SettingsModel
,包含我需要的所有东西,然后在应用程序启动时恢复它?
持久性机制的一个非常重要的要求是它应该是可扩展的:如果我重构设置结构,并且会尝试对使用某些先前版本的SettingsModel
类创建的文件进行反序列化,我显然会失败。
所以静止的是:是否有任何框架可以保持复杂的设置?
答案 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以查找我想要填充的每个元素。如果我将旧版本反序列化为具有其他元素的新配置方案,则XML查询返回null,而是插入默认值。它可以让我处理分层数据列表,我可以加密我需要的任何部分,而且我不会对XML进行版本控制。虽然它比使用XMLSerializer更有用,但我的配置数据不会经常变化,因此值得。
由于您可以拥有大量用户,因此可以将每个用户的XML保存为数据库中的字符串。 System.Data.Sqlite,RaptorDb和FileDb效果良好,PersistentDictionary也是如此。
另一种方法是将数据存储在词典词典中,并使用SharpSerializer将其作为XML保存到文件或上述数据库之一。