Разработка электронных устройств

Серийное и единичное производство аналоговой и цифровой электроники, приборов для промышленности, медицины, автоматизации. Разработка программного обеспечения для микроконтроллеров и сигнальных процессоров. Полное сопровождение проекта и написание технической литературы

Прототипы и серийное производство

Разработка и изготовление корпусов и передних панелей. Разработка и изготовление печатных платы любой сложности. Монтаж печатных плат.

Написание программного обеспечения

Весь путь от создания, поддержания и качества программного обеспечения под любую операционную систему. Основные направления сетевое и системное программирование, взаимодействие клинт - серверных систем.

Разработка механизмов различной степени сложности

Проектирование и прототипирование подвижных и неподвижных механизмов и узлов устройств и агрегатов. Полное сопровождение проекта и написание технической литературы

Создание, продвижение и обслуживание сайтов

Написание php/perl/c кода или использование cms. Собственный сервер для размещения Ваших проектов под любые нагрузки. Поддержание сайта в актуальности и продвижение в поисковых системах.

 
 

Xml.Serialization на C# для чайников

Автор: от 14 Май 2013 года, просмотров 4168

Google

Google

XML (англ. eXtensible Markup Language — расширяемый язык разметки — рекомендованный Консорциумом Всемирной паутины (W3C) язык разметки. Спецификация XML описывает XML-документы и частично описывает поведение XML-процессоров (программ, читающих XML-документы и обеспечивающих доступ к их содержимому). XML разрабатывался как язык с простым формальным синтаксисом, удобный для создания и обработки документов программами и одновременно удобный для чтения и создания документов человеком, с подчёркиванием нацеленности на использование в Интернете. Язык называется расширяемым, поскольку он не фиксирует разметку, используемую в документах: разработчик волен создать разметку в соответствии с потребностями к конкретной области, будучи ограниченным лишь синтаксическими правилами языка. Сочетание простого формального синтаксиса, удобства для человека, расширяемости, а также базирование на кодировках Юникод для представления содержания документов привело к широкому использованию как собственно XML, так и множества производных специализированных языков на базе XML в самых разнообразных программных средствах.

И так, по существу статьи, как же нам взять и записать все наши данные в файл, я имею ввиду настройки приложения. А затем так же просто всё прочитать.

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

Данный процесс называется сериализация. Мы дассмотрим как же нам сериализовать любые переменные, массивы и даже целые классы, или же массивы содержащие в себе классы.

для начала объявим пространства имён, которые нам понядобятся

1
2
3
using System.Xml;
using System.Xml.Serialization;
using System.IO;

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class MyClass
{
    public class inClass 
    {
        public int e = 0;
	    public bool f = true;
    }
    public bool Check = true;
    public String StringSett = "Hello";
    public decimal Number = 1000;
 
    public int[] integerNumber = new int[4];
    public inClass[] tempclass = new inClass[3];
}

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

Теперь раскрасим наш класс внесём небольшие дополнения, которые будут уже отображать нашу будущую структуру XML документа

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class MyClass
{
    public class inClass
    {
        [XmlAttribute("int")]
        public int e = 0;
        [XmlAttribute("bool")]
        public bool f = true;
    }
 
    [XmlElement("boolean")]
    public bool Check = true;
 
    [XmlElement("String")]
    public String StringSett = "Hello";
 
    [XmlElement("decimal")]
    public decimal Number = 1000;
 
    [XmlArray("Array")]
    [XmlArrayItem("item")]
    public int[] integerNumber = new int[4];
 
    [XmlArray("ArrayClass")]
    [XmlArrayItem("itemClass")]
    public inClass[] tempclass = new inClass[3];
}

 Это место пока не буду объяснять, вернёмся к нему позже, как раз тогда, когда уже будет готов наш XML документ.

А сейчас объявим переменную с типом нашего класса.

1
private MyClass x = new MyClass();

 Теперь можно пользоваться. Но для начала необходимо заполнить поля какими либо данными, чем сейчас и займёмся.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
x.Check = false;
 
x.integerNumber[0] = 5;
x.integerNumber[1] = 4;
x.integerNumber[2] = 3;
x.integerNumber[3] = 2;
 
x.Number = 1000099;
 
x.StringSett = "Привет мир";
 
MyClass.inClass p = new MyClass.inClass();
p.e = 150;
p.f = true;
x.tempclass[0] = p;
 
MyClass.inClass t = new MyClass.inClass();
t.e = 999;
t.f = false;
x.tempclass[1] = t;
 
MyClass.inClass y = new MyClass.inClass();
y.e = 457;
y.f = true;
x.tempclass[2] = y;

теперь кинем на форму текст бокс и сделаем ещё одну кнопку, по нажатии которой в текст бокс будет выводится переменная x, текст бокс должен быть мультилайн.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
textBox1.Clear();
textBox1.AppendText("x.Check = " + x.Check.ToString() + System.Environment.NewLine);
textBox1.AppendText("x.integerNumber[0] = " + x.integerNumber[0].ToString() + System.Environment.NewLine);
textBox1.AppendText("x.integerNumber[1] = " + x.integerNumber[1].ToString() + System.Environment.NewLine);
textBox1.AppendText("x.integerNumber[2] = " + x.integerNumber[2].ToString() + System.Environment.NewLine);
textBox1.AppendText("x.integerNumber[3] = " + x.integerNumber[3].ToString() + System.Environment.NewLine);
textBox1.AppendText("x.Number = " + x.Number.ToString() + System.Environment.NewLine);
textBox1.AppendText("x.StringSett = " + x.StringSett + System.Environment.NewLine);
textBox1.AppendText("x.tempclass[0].e = " + x.tempclass[0].e.ToString() + System.Environment.NewLine);
textBox1.AppendText("x.tempclass[0].f = " + x.tempclass[0].f.ToString() + System.Environment.NewLine);
textBox1.AppendText("x.tempclass[1].e = " + x.tempclass[1].e.ToString() + System.Environment.NewLine);
textBox1.AppendText("x.tempclass[1].f = " + x.tempclass[1].f.ToString() + System.Environment.NewLine);
textBox1.AppendText("x.tempclass[2].e = " + x.tempclass[2].e.ToString() + System.Environment.NewLine);
textBox1.AppendText("x.tempclass[2].f = " + x.tempclass[2].f.ToString() + System.Environment.NewLine);

И так мы можем записать значения в переменнуи и вывести их теперь осталось всё это закинуть в XML, делаем так.

1
2
3
4
5
6
7
8
9
10
11
12
using (StreamWriter writer = new StreamWriter("setting.xml"))
{
    try
    {
        XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
        ns.Add("", "");
        XmlSerializer serializer = new XmlSerializer(x.GetType());
        serializer.Serialize(writer, x, ns);
    }
    catch (Exception) {}
    finally {writer.Close();}
}

И в итоге получаем вот такой файлик.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<MyClass>
  <boolean>false</boolean>
  <String>Привет мир</String>
  <decimal>1000099</decimal>
  <Array>
    <item>5</item>
    <item>4</item>
    <item>3</item>
    <item>2</item>
  </Array>
  <ArrayClass>
    <itemClass int="150" bool="true" />
    <itemClass int="999" bool="false" />
    <itemClass int="457" bool="true" />
  </ArrayClass>
</MyClass>

А теперь вернитесь вверх, где я описывал класс и добовлял новые строчки, я надеюсь теперь то стало всё понятно зачем я это сделал. Иначе всё выглядело бы вот так, что мне совсем не нравится.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="utf-8"?>
<MyClass>
  <Check>false</Check>
  <StringSett>Привет мир</StringSett>
  <Number>1000099</Number>
  <integerNumber>
    <int>5</int>
    <int>4</int>
    <int>3</int>
    <int>2</int>
  </integerNumber>
  <tempclass>
    <inClass>
      <e>150</e>
      <f>true</f>
    </inClass>
    <inClass>
      <e>999</e>
      <f>false</f>
    </inClass>
    <inClass>
      <e>457</e>
      <f>true</f>
    </inClass>
  </tempclass>
</MyClass>

Теперь попробуем прочитать наши данные из файла и для достоверности выведем их в текст бокс. Читать будем с помощью вот этого простейшего кода.

1
2
3
4
5
6
7
8
9
10
using (StreamReader reader = new StreamReader("setting.xml"))
{
    try
    {
        XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
        x = serializer.Deserialize(reader) as MyClass;
    }
    catch (Exception) { }
    finally { reader.Close(); }
}

Можно было бы конечно и без проверки ошибок обойтись, но лучше подстраховаться.

И так у нас на форме должно получиться 4 кнопки "заполнить", "в текстбокс", "в файл", "из файла" и текстбокс, листинг обработки нажатия кнопки это рассмотреные нами примеры заполнения и вывода.

Теперь выполняем действия: нажимаем первую кнопку, затем вторую, видим наши данные в текстовом поле, хатем третью - записываем всё в файл.

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

Проект и полный листинг программы не предоставляю в силу его простоты.

Категория: