четверг, 12 апреля 2012 г.

Сериализация вообще и сохранение параметров в частности.

    Хранение параметров - задача вполне себе типовая.  И для неё есть готовые решения, например тот же UserSettings. Но лично мне он не показался особо удобным, плюс в произвольном месте конфигурацию тоже не расположить.

    Для борьбы с этой проблемкой будем использовать сериализацию.
    В данном случае используется XML- сериализация. Что она из себя представляет? Грубо говоря, это сохранение класса на диск в виде xml файла.

    Важно: сериализуются только открытые (public) поля и свойства. Зато сериализуются очень просто, буквально в пару движений.

    Итак, для начала нам нужно подготовить класс, в котором будут содержаться параметры приложения. Для примера, пусть он содержит параметры подключения к SQL серверу.


[Serializable]
    public class Settings
    {

        public string server_name
        { get; set; }

        public string base_name
        { get; set; }


    }

Коротко о классе:
[Serializable] - атрибут, указывающий на то, что класс может сериализоваться.
конструкция { get; set; } просто создаёт автосвойство. Можно создавать свойства и с полным описанием, но в данном случае смысла в этом нет.


    Отлично, класс у нас есть. Теперь присваиваем ему значения.

Settings sett = new Settings();
sett.server_name = "my_server";
sett.base_name = "my_base";

    Осталось сериализовать.

            XmlSerializer Serializer = new XmlSerializer(typeof(Settings));
            StreamWriter myWriter = new StreamWriter(@"my_Settings.xml");
            Serializer.Serialize(myWriter, sett);
            myWriter.Close();

Для этого создаём экземпляр сериализатора, открываем для записи файловый поток и сериализатору этот поток и экземпляр класса настроек. В результате мы получим файл my_Settings.xml, расположенный в том-же каталоге, что и программа. Содержимое файла:

  <?xml version="1.0" encoding="utf-8" ?>
- <Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <server_name>my_server</server_name>
  <base_name>my_base</base_name>
  </Settings>
 
 
    Отлично, настройки сохранить получилось. Теперь нужно их прочитать. Делается это следующим образом:
 
 Settings sett = new Settings();
   XmlSerializer Serializer = new XmlSerializer(typeof(Settings));
            FileStream myFileStream = new FileStream(@"my_Settings.xml", FileMode.Open);
            sett = (Settings)Serializer.Deserialize(myFileStream);
 myFileStream.Close();
 
 Опять создаём объект сериализатора, опять открываем файл, только на этот раз на чтение и десериализуем открытый файл, приводя тип. При этом крайне желательно не забывать закрывать ненужные файлы.

    Собственно, на этом и все.

Похожие посты:

Комментариев нет:

Отправить комментарий