.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;
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5