.NET 4.x Создать файл конфигурации - C#
Формулировка задачи:
Доброго времени суток, возникла необходимость создать файл конфигурации для приложения, и так как оно написано на WPF и полностью придерживается паттерна MVVM, нужно всего запомнить пару десятков значений переменных, залепить их в файл и при следующем запуске считать, как это сделать красиво и без геморроя? Я могу и так написать это, но будет громоздко. Может кто знает как изменить значение переменной по ключу из словаря с таким же значением ключа, как имя переменной? Вроде : Переменная GetItems Типа bool, а в словаре key: GetItems, value = true , и присвоить значение тру в ту переменную Ну надеюсь вы поймёте, очень спешу, дело очень срочно, если можно набросать код, буду крайне признателен
Решение задачи: «.NET 4.x Создать файл конфигурации»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Xml.Serialization; using System.Reflection; using System.ComponentModel; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using Universal.UI.Forms; namespace Universal.UI { [Serializable] public class Settings { #region FIELDS /// <summary> /// Путь к файлу с данными сериализации /// </summary> [NonSerialized] private static string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "settings.bin"); /// <summary> /// Статическое поле экземпляра /// </summary> [NonSerialized] private static Settings instance = null; /// <summary> /// Тип выбранного интерфейса взаимодействия /// </summary> private string interfaceType; /// <summary> /// Имя последовательного порта /// </summary> private string portName; /// <summary> /// Тип выбранной платформы /// </summary> private string platformType; /// <summary> /// Уровень питания Usbdm /// </summary> private string vddValue; /// <summary> /// Язык интерфейса /// </summary> private string language; #endregion #region PROPERTIES /// <summary> /// Свойство выбранного интерфейса взаимодействия /// </summary> public string InterfaceType { get { return interfaceType; } set { interfaceType = value; } } /// <summary> /// Свойство имени последовательного порта /// </summary> public string PortName { get { return portName; } set { portName = value; } } /// <summary> /// Свойство типа платформы /// </summary> public string PlatformType { get { return platformType; } set { platformType = value; } } /// <summary> /// Свойство уровня питания Usbdm /// </summary> public string VddValue { get { return vddValue; } set { vddValue = value; } } /// <summary> /// Свойство языка интерфейса /// </summary> public string Language { get { return language; } set { language = value; } } /// <summary> /// Статическое свойство экземпляра /// </summary> public static Settings Instance { get { if (instance == null) { instance = new Settings(); } return instance; } } #endregion /// <summary> /// Закрытый конструктор /// </summary> private Settings() { InterfaceType = "HWKey"; PortName = ""; PlatformType = "ARCADIA"; Language = "RU"; VddValue = "OFF"; } /// <summary> /// Сохранение настроек в файл /// </summary> public static void Save(){ try { using (Stream stream = File.OpenWrite(path)) { BinaryFormatter serializer = new BinaryFormatter(); serializer.SurrogateSelector = Settings.SurrogateSelector; serializer.Serialize(stream, Settings.Instance); } } catch { return; } } /// <summary> /// Загрузка настроек из файла /// </summary> public static void Load() { try { using (Stream stream = File.OpenRead(path)) { BinaryFormatter serializer = new BinaryFormatter(); serializer.SurrogateSelector = Settings.SurrogateSelector; serializer.Deserialize(stream); } } catch { return; } } /// <summary> /// Суррогатный селектор сериализации /// </summary> public static SurrogateSelector SurrogateSelector { get { var selector = new SurrogateSelector(); var singleton = typeof(Settings); var context = new StreamingContext(StreamingContextStates.All); var surrogate = new SerializationSurrogate(); selector.AddSurrogate(singleton, context, surrogate); return selector; } } /// <summary> /// Реализация селектора суррогата сериализации /// </summary> private sealed class SerializationSurrogate : ISerializationSurrogate { void ISerializationSurrogate.GetObjectData(object obj, SerializationInfo info, StreamingContext context) { Settings singleton = Settings.Instance; var fields = typeof(Settings).GetFields(BindingFlags.Instance | BindingFlags.NonPublic); foreach (var field in fields) { info.AddValue(field.Name, field.GetValue(singleton)); } } object ISerializationSurrogate.SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector) { Settings singleton = Settings.Instance; foreach (var i in info) { singleton.GetType().GetField(i.Name, BindingFlags.Instance|BindingFlags.NonPublic) .SetValue(singleton, i.Value); } return singleton; } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д