.NET 4.x Создать файл конфигурации - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток, возникла необходимость создать файл конфигурации для приложения, и так как оно написано на WPF и полностью придерживается паттерна MVVM, нужно всего запомнить пару десятков значений переменных, залепить их в файл и при следующем запуске считать, как это сделать красиво и без геморроя? Я могу и так написать это, но будет громоздко. Может кто знает как изменить значение переменной по ключу из словаря с таким же значением ключа, как имя переменной? Вроде : Переменная GetItems Типа bool, а в словаре key: GetItems, value = true , и присвоить значение тру в ту переменную Ну надеюсь вы поймёте, очень спешу, дело очень срочно, если можно набросать код, буду крайне признателен

Решение задачи: «.NET 4.x Создать файл конфигурации»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using System.Xml.Serialization;
  7. using System.Reflection;
  8. using System.ComponentModel;
  9. using System.Runtime.Serialization;
  10. using System.Runtime.Serialization.Formatters.Binary;
  11.  
  12. using Universal.UI.Forms;
  13.  
  14. namespace Universal.UI {
  15.     [Serializable]
  16.     public class Settings {
  17.         #region FIELDS
  18.         /// <summary>
  19.         /// Путь к файлу с данными сериализации
  20.         /// </summary>
  21.         [NonSerialized]
  22.         private static string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "settings.bin");
  23.         /// <summary>
  24.         /// Статическое поле экземпляра
  25.         /// </summary>
  26.         [NonSerialized]
  27.         private static Settings instance = null;
  28.  
  29.         /// <summary>
  30.         ///  Тип выбранного интерфейса взаимодействия
  31.         /// </summary>
  32.         private string interfaceType;
  33.  
  34.         /// <summary>
  35.         ///  Имя последовательного порта
  36.         /// </summary>
  37.         private string portName;
  38.         /// <summary>
  39.         ///  Тип выбранной платформы
  40.         /// </summary>
  41.         private string platformType;
  42.  
  43.         /// <summary>
  44.         ///  Уровень питания Usbdm
  45.         /// </summary>
  46.         private string vddValue;
  47.  
  48.         /// <summary>
  49.         /// Язык интерфейса
  50.         /// </summary>
  51.         private string language;
  52.         #endregion
  53.  
  54.         #region PROPERTIES
  55.         /// <summary>
  56.         ///  Свойство выбранного интерфейса взаимодействия
  57.         /// </summary>
  58.         public string InterfaceType {
  59.             get { return interfaceType; }
  60.             set { interfaceType = value; }
  61.         }
  62.         /// <summary>
  63.         ///  Свойство имени последовательного порта
  64.         /// </summary>
  65.         public string PortName {
  66.             get { return portName; }
  67.             set { portName = value; }
  68.         }
  69.         /// <summary>
  70.         /// Свойство типа платформы
  71.         /// </summary>
  72.         public string PlatformType {
  73.             get { return platformType; }
  74.             set { platformType = value; }
  75.         }
  76.         /// <summary>
  77.         /// Свойство уровня питания Usbdm
  78.         /// </summary>
  79.         public string VddValue {
  80.             get { return vddValue; }
  81.             set { vddValue = value; }
  82.         }
  83.         /// <summary>
  84.         /// Свойство языка интерфейса
  85.         /// </summary>
  86.         public string Language {
  87.             get { return language; }
  88.             set { language = value; }
  89.         }
  90.         /// <summary>
  91.         /// Статическое свойство экземпляра
  92.         /// </summary>
  93.         public static Settings Instance {
  94.             get {
  95.                 if (instance == null) {
  96.                     instance = new Settings();
  97.                 }
  98.                 return instance;
  99.             }
  100.         }
  101.         #endregion
  102.  
  103.         /// <summary>
  104.         /// Закрытый конструктор
  105.         /// </summary>
  106.         private Settings() {
  107.             InterfaceType = "HWKey";
  108.             PortName = "";
  109.             PlatformType = "ARCADIA";
  110.             Language = "RU";
  111.             VddValue = "OFF";
  112.         }
  113.  
  114.         /// <summary>
  115.         /// Сохранение настроек в файл
  116.         /// </summary>
  117.         public static void Save(){
  118.             try {
  119.                 using (Stream stream = File.OpenWrite(path)) {
  120.                     BinaryFormatter serializer = new BinaryFormatter();
  121.                     serializer.SurrogateSelector = Settings.SurrogateSelector;
  122.  
  123.                     serializer.Serialize(stream, Settings.Instance);
  124.                 }
  125.             }
  126.             catch { return; }
  127.         }
  128.  
  129.         /// <summary>
  130.         ///  Загрузка настроек из файла
  131.         /// </summary>
  132.         public static void Load() {
  133.             try {
  134.                 using (Stream stream = File.OpenRead(path)) {
  135.                     BinaryFormatter serializer = new BinaryFormatter();
  136.                     serializer.SurrogateSelector = Settings.SurrogateSelector;
  137.                     serializer.Deserialize(stream);
  138.                 }
  139.             }
  140.             catch { return; }
  141.         }
  142.  
  143.         /// <summary>
  144.         /// Суррогатный селектор сериализации
  145.         /// </summary>
  146.         public static SurrogateSelector SurrogateSelector {
  147.             get {
  148.                 var selector = new SurrogateSelector();
  149.                 var singleton = typeof(Settings);
  150.                 var context = new StreamingContext(StreamingContextStates.All);
  151.                 var surrogate = new SerializationSurrogate();
  152.  
  153.                 selector.AddSurrogate(singleton, context, surrogate);
  154.                 return selector;
  155.             }
  156.         }
  157.  
  158.         /// <summary>
  159.         /// Реализация селектора суррогата сериализации
  160.         /// </summary>
  161.         private sealed class SerializationSurrogate : ISerializationSurrogate {
  162.             void ISerializationSurrogate.GetObjectData(object obj, SerializationInfo info, StreamingContext context) {
  163.                 Settings singleton = Settings.Instance;
  164.                 var fields = typeof(Settings).GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
  165.                 foreach (var field in fields) {
  166.                     info.AddValue(field.Name, field.GetValue(singleton));
  167.                 }
  168.             }
  169.  
  170.             object ISerializationSurrogate.SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector) {
  171.                 Settings singleton = Settings.Instance;
  172.                 foreach (var i in info) {
  173.                    
  174.                     singleton.GetType().GetField(i.Name, BindingFlags.Instance|BindingFlags.NonPublic)
  175.                         .SetValue(singleton, i.Value);
  176.                 }
  177.                 return singleton;
  178.             }
  179.         }
  180.     }
  181. }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут