.Net在不使用Properties.Settings的情况下保留应用程序设置

时间:2012-07-24 14:03:49

标签: c# xml serialization persistence settings

我已经阅读了一段时间,了解如何在后续应用程序加载时保留应用程序设置。我的应用程序是Winforms应用程序。

我知道有几种方法可以做到这一点,并且来自Delphi背景我总是习惯使用.ini文件,但我可以看到XML对于我的特定场景可能更灵活。

我正在考虑为我的应用程序提供两种可能的解决方案来保持其设置。请注意,由于两个原因,我无法使用Properties.Settings方法存储我的数据:

  • 我需要持久保存的数据是动态创建的,也就是说我在运行时可能有1,2,10个不同类的实例(请注意每个实例都有自己的“名称”)
  • 我实例化的其中一些类是从类库(单独的项目)创建的(在我的应用程序中没有“设置”部分)
  • 我不想在Properties.Settings中创建100(如果不是1000)的设置。

我的两个可能的解决方案如下:

  1. 通过提供getset数据的方法,创建一个抽象类来管理写入和撤消设置。 GetBoolean("InstanceName","Setting", bool default)SetBoolean("InstanceName","Setting")。然后,每个需要持久化的类可以实现此抽象类,因此,在实例化时,从提供的文件中读取其设置,并在特定属性更改时保存设置。
  2. 在每个类中将我想要的属性标记为Serializable,并在实例化时,确保创建类对象在类上调用LoadSettings(string filename)方法,该方法从提供的方法加载所需的Serialized设置文件,并在调用SaveSettings(string filename)时写入更新。我可以使用IPersistent接口,例如我的类可以实现的。
  3. 我希望有人可以指出我应该采用哪种方法。

    请注意,我需要能够在每个类的每个实例中保留某些属性。我无论如何都看不到自动化,并且必须手动完成。

    请注意,这些对象是在运行时实例化的,因此我事先知道需要保留哪些对象,只知道其中的特定属性。请考虑以下示例:

    假设我有一个Serial类(我自己在System.IO.SerialPort类周围有一些包装器属性/方法等。用户在运行时可能需要1,2,x个串口我需要一些方法来保存正在使用的串口数量,并为每个端口保存NamePortnumberBaudParity等属性。

    因此,给定XML文件,我需要能够读取应用程序创建两个串行端口的信息,1个称为GPS1,另一个称为GPS2。对于GPS1PortnumberCOM1GPS2PortnumberCOM2等。

    唉,要序列化的数据量很大,这只是一个例子。我可以设想在数十到数百个对象(实例)中存储,每个对象有十个左右的设置。


    我需要的一些重要功能:

    可选择让用户选择设置文件的功能,这样我就可以创建设置“配置文件”,用户可以加载并保存到单独的文件中。 每个文件都可以在一台机器之间移动。因此,例如,如果用户在PC上创建配置文件,然后需要将PC更改为另一个,则他/她可以简单地复制该文件并加载相同的设置。

    我通常只需要存储基本类型(stringintfloatboolean等),但显然存储更复杂类型的能力是优点

    有人能指出我正确的方向吗?或者,如果我的两个解决方案不可行,建议另一个?

0 个答案:

没有答案