C#:将设置导入/导出到文件/从文件导入
从应用程序内部将应用程序内部设置导入/导出到文件中的最佳方法是什么?
我有Settings.settings文件,将Winform UI绑定到设置文件,并且想要导入/导出设置,类似于Visual Studio导入/导出设置功能。
解决方案
回答
我们可以使用绑定到表单的DataSet。我们可以保存/还原它。
回答
我们可以只使用部分,还是出于特定原因而进入其他文件?
回答
我们在谈论配置文件吗?
回答
如果使用的是Settings.settings文件,则将其保存到配置文件中。更新设置后,通过调用YourNamespace.Properties.Settings.Save(),它们将被保存到配置文件中。
但是,我不知道我们所说的"多套设置"是什么意思。如果设置是用户设置,则每个用户将拥有自己的一组设置。如果单个用户有多组设置,则可能不应该使用.settings文件。相反,我们将要使用数据库。
回答
我使用的一种久经考验的方式是设计设置容器类。
该容器类可以具有用于不同类型的设置类别的子类。
由于我们通过属性名称引用"设置",因此效果很好,因此,如果将来发生某些更改,则会出现编译时错误。它也是可扩展的,因为我们始终可以通过将更多属性添加到各个设置类中来创建新设置,并为该属性的私有变量分配默认值,如果该特定设置在较早版本的应用程序中不存在,则将使用该属性。保存新容器后,新设置也将保留。
另一个优点是XML具有明显的人机可读性,这对设置非常有用。
要保存,请将容器对象序列化为XML数据,然后将数据写入文件。要加载,请从文件中读取数据,然后反序列化回设置容器类。
要通过标准Ccode进行序列化,请执行以下操作:
public static string SerializeToXMLString(object ObjectToSerialize) MemoryStream mem = new MemoryStream(); System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(ObjectToSerialize.GetType()); ser.Serialize(mem,ObjectToSerialize); ASCIIEncoding ascii = new ASCIIEncoding(); return ascii.GetString(mem.ToArray());
要通过标准Ccode反序列化:
public static object DeSerializeFromXMLString(System.Type TypeToDeserialize, string xmlString) byte[] bytes = System.Text.Encoding.UTF8.GetBytes(xmlString); MemoryStream mem = new MemoryStream(bytes); System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(TypeToDeserialize); return ser.Deserialize(mem);
关于可序列化设置类的最后一件好事是因为它是一个对象,所以我们可以使用IntelliSense快速导航到特定设置。
注意:实例化设置容器类之后,应将其设置为另一个静态管理类的静态属性(如果需要,可以将其称为SettingsManager)。
该管理类允许我们从应用程序中的任何位置(因为它是静态的)访问设置,并且还可以具有静态函数来处理该类的加载和保存。