ак сериализировать статический класс с 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#.

 

 омментарии  

 
0#1ƒмитрий2016-05-20 16:51Ќо ведь объект класса, в котором реализован Singleton, будет доступен не во всех част€х приложени€÷итировать
 

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


«ащитный код
ќбновить

«  ак перебрать в цикле все переменные класса и присвоить им значени€ C#

‘отоальбом

fotic.jpg

ќблако “егов