好的,这是一个全新的问题,所以请原谅我。
存储变量以保持变量并且可以恢复的最佳方法是什么?我有一个小应用程序,使用大约10个变量(字符串和十进制)作为设置。目前,我将它们全部转换为字符串,如果需要,将它们放入数组并将数组序列化为文件。
如果我想要添加变量,这是一种痛苦。所以,我正在考虑使用哈希表并将其序列化。同样,不确定最佳方法是什么。
我的一些要求是数据需要安全存储(加密),并且必须可供其他应用程序访问(我还有两个其他小应用程序可以读取这些设置)。
我知道我过于复杂,过于简单。这必须在几乎所有构建的应用程序中完成。
TIA
答案 0 :(得分:4)
最简单,最有效和最灵活的方法是创建一个类,添加设置,然后在需要时序列化/反序列化。该类的源代码可以在其他程序集中重用,持久性可以在任何地方。由于您的安全要求,请确保此类知道如何序列化/反序列化自身。这可确保实现与课程保持一致。然后调用程序集只需要通过调用静态/共享方法来创建对象。
这为您提供强类型设置,版本控制,添加新设置的能力,甚至复杂数据类型(其他类)。这个对象甚至可以作为参数传递给其他对象,并且因为它支持序列化,所以它非常灵活。
答案 1 :(得分:3)
使用应用程序/ Web配置文件,并使用ConfigurationManager.AppSettings [configurationItemName]方法。 (在System.Configuration中)
答案 2 :(得分:1)
为什么不把它们放在app.config中? (或web.config)
答案 3 :(得分:1)
您肯定可以使用.Net Framework中的“应用程序设置”。
答案 4 :(得分:0)
如果我还是使用了数据库,我可能会在那里添加一个表并存储它们,否则我想我会使用某种类型的XML文件,我不愿意添加额外的复杂性。数据库只有几个设置。
使用这些解决方案中的任何一个,您都可以轻松添加更多设置(旧应用程序将忽略它们)以及指定数据类型(作为XML中的属性)。
答案 5 :(得分:0)
您可以将值存储在系统注册表中:
获得一把钥匙:
// This will create the key if it does not exist.
String keyPath = "Sofware\Foo\Bar"; // use "Software\Company\App" or similar
RegistryKey appKey = Registry.CurrentUser.CreateSubKey(keyPath);
保存值:
String config = "SomeConfigurationValue";
appKey.SetValue("ConfigString", config);
加载值:
String config = (string)appKey.GetValue("ConfigString", "Default Value");
答案 6 :(得分:0)
只是为了确保我理解
<强>要求:强> 1.将应用程序的用户特定设置存储在文件或数据库中 2.有时,您可以添加其他属性。
这是基于网络的吗?赢形式?,wcf?
我最初的想法是在持久化时包含版本号。
每次更新设置类时,都要创建一个继承自上一版本的新设置类。添加新属性并更新版本号。
存储: 在DB中,有两个字段:1-版本2-序列化设置数据。 在一个文件中,有两个条目1-版本2-序列化设置数据。
序列化时,请确保包含设置类版本号。
反序列化时,使用Factory检索设置类的正确版本。
要记住的一件事是,您必须考虑应用程序中较旧的设置实例。
如果您今天添加“背景颜色”属性,则今天之前的所有设置文件都无法访问它。您需要确保应用程序可以处理这种情况。
因此,如果工厂找到旧版本的设置类,它可以使用保存的数据创建该类的最新版本,并使用默认值填充新属性。
祝你好运,
帕特里克
答案 7 :(得分:0)
将设置存储到类中,并将这些对象序列化为隔离存储。确保将隔离级别设置为用户级别,以便其他应用程序可以读取当前用户的设置。
http://msdn.microsoft.com/en-us/library/8dzkff1s%28VS.80%29.aspx
IsolatedStorageFile,派生 来自IsolatedStorage,提供基本功能 存储装配和管理 应用文件。一个例子 IsolatedStorageFile类代表一个 单个商店位于文件中 系统