.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;
- }
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д