Как сериализировать статический класс с XmlSerializer - Singleton

06:02:2013 Рі.

 Думаю перед каждым разработчиком рано или поздно встает вопрос сериализации статического класса в XML. Это достаточно удобная практика. Часто нужно хранить конфигурации программы, или переносить данные между программами. ХМЛ формат для этого - идеальное решение. Формат является универсальным и не зависит от платформы. Выгоды очевидны.  

 

Проще всего файлы конфигурацию реализовать в виде статического класса, который был бы доступен в программе из любого места.

Однако, есть проблема:XmlSerializer не может сериализировать статические классы. Задача - обойти это ограничение.

Решение: реализовать класс с помощью паттерна Singleton.  

[XmlRoot(elementName:"Settings")]
public classSettings

       private staticSettings _instance;

        private Settings() {//Если необходимо - реализовать конструктор}

       //Реализация Singleton
       public static
Settings Instance
       { 
           get

           { 
               if
(_instance == null)
               {
                   _instance = newSettings();
               } 
             return
_instance;
           }
      }

      [XmlElement("AnySetting")]
      public string anyVariable;

      //Реализация сериализации
      private bool CreateConfigFile()
      {
         var serializer = new XmlSerializer(typeof (Settings));
         using (var myWriter = newStreamWriter(ConfigFilePath))
         {
             serializer.Serialize(myWriter, _instance);
         }
      }

     //Реализация десериализации
     var serializer = new XmlSerializer(typeof (Settings));
     using (var reader = new StreamReader(ConfigFilePath))
     {
         Settings deserialize = (Settings) serializer.Deserialize(reader);
         anyVariable = deserialize.CurrentLocalization;
     }

}

Далее видоизменяем данный шаблон как нужно, добавляя обработку исключительных ситуаций, дополнитеольные поля и т.д. Таким образом, подобный пример можно считать хорошей заменой сериализации статического класса в XML C#.

 

Добавить комментарий



Обновить

« Как перебрать в цикле все переменные класса и присвоить им значения C#
← Раньше

Фотоальбом

fotic.jpg

Облако Тегов