Небольшой простой локальный магазин данных для сохранения пользовательских настроек
Вопрос
У меня есть это крошечное приложение Winforms C #, которое не будет расти никоим образом. Это всего лишь два входных поля и кнопка.
Я хочу знать, если вы, ребята, знаете о пути к хранить то значения что пользовательские входы в местном хранилище. Отказ Вы можете рассмотреть 10 записей, чтобы быть большим количеством данных для этого сценария.
Требования
Это не должно потребовать никакой настройки из стороны базы данных. (Создание таблицы и т. Д.)
Я должен быть в состоянии просто дать ему объект, и он должен хранить его, я не хочу тратить время на это.
Данные должны быть довольно легко извлечены.
Я хочу иметь возможность повторно использовать эту вещь для каждого небольшого приложения, которое я создаю так.
Мои идеи
Объект Poco, который будет XML-сериал и сохранен в папку локальных настроек. После загрузки приложения этот файл десериализируется обратно в объект 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;
}
}
Объект Wapper 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.