Сериализация и десериализация объектов в C#

Сериализация - это процесс преобразования объекта в последовательный поток-подобный формат. Часто это означает преобразование его в XML-данные для хранения или передачи по сети.

Deserialization - это процесс использования сериализации для восстановления исходного объекта.

Базовая сериализация в C# относительно проста. Сначала создайте класс, который вы хотите сериализовать и украсить его с помощью атрибута Serializable. Определите свойства класса, как обычно. Обратите внимание, что класс должен быть public и должен иметь пустой конструктор по умолчанию, который не принимает никаких параметров. Без этих двух функций сериализатор не может создавать объекты.

В следующем коде показан класс Person этого примера.

using System.Xml.Serialization;
...
// Класс должен быть Сериализуемым и общедоступным.
[Serializable()]
public class Person
{
    public string FirstName;
    public string LastName;
    public string Street;
    public string City;
    public string State;
    public string Zip;

    // Пусто конструктор, необходимый для сериализации.
    public Person()
    {
    }

    // Инициализация конструктора.
    public Person(string first_name, string last_name,
        string street, string city, string state, string zip)
    {
        FirstName = first_name;
        LastName = last_name;
        Street = street;
        City = city;
        State = state;
        Zip = zip;
    }
}

Следующий код показывает, как программа сериализует объект Person.

// Создайте Person, сериализуйте его и покажите сериализацию.
private void btnSerialize_Click(object sender, EventArgs e)
{
    // Создаем нового человека.
    Person per = new Person(
        txtFirstName.Text,
        txtLastName.Text,
        txtStreet.Text,
        txtCity.Text,
        txtState.Text,
        txtZip.Text);

    // Создаем XmlSerializer и StringWriter.
    XmlSerializer xml_serializer =
        new XmlSerializer(typeof(Person));
    using (StringWriter string_writer = new StringWriter())
    {
        // Сериализация.
        xml_serializer.Serialize(string_writer, per);

        // Отображение сериализации.
        txtSerialization.Text = string_writer.ToString();
    }

    // Сброс текстовых полей.
    txtFirstName.Clear();
    txtLastName.Clear();
    txtStreet.Clear();
    txtCity.Clear();
    txtState.Clear();
    txtZip.Clear();
}

Сначала код создает новый объект Person, передавая его конструктору значения, введенные в текстовые поля программы. Затем он создает объект XmlSerializer, передавая его конструктору тип объекта, который он будет сериализовать: Person.

Далее код создает объект StringWriter, чтобы он мог сериализоваться в строку. Если вы хотите, вы можете сериализовать другие объекты потока, такие как потоки файлов.

Код вызывает метод Serialize сериализатора, передавая ему поток для сериализации (StringWriter) и объект Person для сериализации , Программа отображает сериализацию в текстовом поле txtSerialization.

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


Mickey
  Moose
  1337 Leet St
  Bugsville
  CA
  12345

Следующий код показывает, как программа десериализует сериализацию для воссоздания объекта Person.

// Deserialize Person.
private void btnDeserialize_Click(object sender, EventArgs e)
{
    // Уничтожьте сериализацию.
    XmlSerializer xml_serializer =
        new XmlSerializer(typeof(Person));
    using (StringReader string_reader =
        new StringReader(txtSerialization.Text))
    {
        Person per =
            (Person)(xml_serializer.Deserialize(string_reader));

        // Отображение свойств Person в TextBoxes.
        txtFirstName.Text = per.FirstName;
        txtLastName.Text = per.LastName;
        txtStreet.Text = per.Street;
        txtCity.Text = per.City;
        txtState.Text = per.Street;
        txtZip.Text = per.Zip;
    }

    txtSerialization.Clear();
}

Код создает новый объект XmlSerializer для Person, как и раньше. Он создает инициализацию StringReader для хранения ранее созданной сериализации.

Источник: http://csharphelper.com/blog/2016/01/serialize-and-deserialize-objects-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector