题
我有这个微小的 C# winforms 应用程序,它不会以任何方式变大。它只是两个输入字段和一个按钮。
我想知道你们是否知道一种方法 店铺 这 价值观 用户输入的 在本地数据存储中. 。对于这种情况,您可能认为 10 条记录是大量数据。
要求
它不需要数据库端的任何设置。(表创建等)
我应该能够给它一个对象,它应该存储它,我不想在这上面浪费时间。
数据需要相当容易检索。
我希望能够为我创建的每个小应用程序重复使用这个东西。
我的想法
将被 XML 序列化并保存到本地设置文件夹的 POCO 对象。加载应用程序后,该文件将反序列化回 POCO 对象。
OODBMS:我对这些没有经验,但我一直认为它们由单个 dll 组成,因此很容易将它们与程序打包在一起。
很久很久以前,我曾经构建过一个应用程序,将用户设置存储在注册表中。不知道这是否仍然受到赞赏。
您认为最好的方法是什么?
非常感谢代码示例!
解决方案
我考虑了这两个答案并构建了以下内容:
public static class IsolatedStorageExtensions
{
public static void SaveObject(this IsolatedStorage isoStorage, object obj, string fileName)
{
IsolatedStorageFileStream writeStream = new IsolatedStorageFileStream(fileName, FileMode.Create);
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(writeStream, obj);
writeStream.Flush();
writeStream.Close();
}
public static T LoadObject<T>(this IsolatedStorage isoStorage, string fileName)
{
IsolatedStorageFileStream readStream = new IsolatedStorageFileStream(fileName, FileMode.Open);
BinaryFormatter formatter = new BinaryFormatter();
T readData = (T)formatter.Deserialize(readStream);
readStream.Flush();
readStream.Close();
return readData;
}
}
包含要序列化的数据的包装 POCO 对象:
[Serializable]
internal class DataStoreContainer
{
public DataStoreContainer()
{
UserIDs = new List<int>();
}
public List<int> UserIDs { get; set; }
}
要使用这些扩展:
private IsolatedStorageFile _isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
private DataStoreContainer _data = new DataStoreContainer();
private const string FILENAME = "MyAppName.dat";
并在您想要获取数据的任何方法中:
_data = _isoStore.LoadObject<DataStoreContainer>(FILENAME);
保存数据:
_isoStore.SaveObject(_data, FILENAME);
其他提示
你看过吗 隔离存储?它将数据存储在特定于该用户(或应用程序,具体取决于您指定的方式)的本地文件中。您可以轻松地将对象序列化到存储区或从存储区序列化对象,因为它是基于流的。这听起来像是解决您问题的完美解决方案。
既然你说 10 个项目太多了,我会投票给 #1 或 #1 的变体,二进制序列化......您似乎没有表明能够读取数据很重要,并且二进制数据应该为您提供较小的文件大小,但如果 10 已经很多,那么这仍然不重要。
话虽这么说,我很喜欢我所看到的 db4objects。
不隶属于 StackOverflow