Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Сериализация и десериализация в C#: практический пример

Сериализация и десериализация в C#

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

Рассмотрим простой класс Tutorial, содержащий два свойства: ID и Name. Сериализуя экземпляр этого класса в файл, мы можем позже прочитать файл и воссоздать тот же объект с исходными данными.

Как сериализовать объект в C#

Ниже пошаговое руководство, демонстрирующее процесс в консольном приложении.

  1. Создайте класс Tutorial со свойствами ID и Name.
  2. Инстанцируйте класс, присвоив ID = 1 и Name = ".Net".
  3. Сериализуйте объект в файл Example.txt.
  4. Десериализуйте объект из файла и отобразите его значения в консоли.

Вставьте следующий код в ваш файл Program.cs.

Шаг 1) Добавьте класс. Первый шаг — добавить класс, который будет сериализован.

Сериализация и десериализация в C#: практический пример

Пояснение кода:

  1. Класс должен быть отмечен атрибутом [Serializable]; иначе сериализация не сработает.
  2. Определяем класс Tutorial с двумя полями: int ID и string Name.

Шаг 2) Создайте объект и сериализуйте его. На этом шаге мы создаём экземпляр Tutorial и записываем его в Example.txt.

Сериализация и десериализация в C#: практический пример

Пояснение кода:

  1. Создаём экземпляр Tutorial и устанавливаем ID = 1 и Name = ".Net".
  2. Инстанцируем BinaryFormatter (примечание: BinaryFormatter устарел в .NET 5+; для продакшн-кода рассмотрите System.Text.Json или XmlSerializer).
  3. Открываем FileStream в режиме FileMode.Create и FileAccess.Write для записи бинарных данных.
  4. Вызываем formatter.Serialize для записи объекта в поток, затем закрываем поток.

Шаг 3) Десериализуйте объект. Наконец, прочитайте данные обратно из файла для проверки процесса.

Сериализация и десериализация в C#: практический пример

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace DemoApplication {
    [Serializable]
    class Tutorial {
        public int ID;
        public string Name;
        static void Main(string[] args) {
            Tutorial obj = new Tutorial();
            obj.ID = 1;
            obj.Name = ".Net";
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream("E:\\ExampleNew.txt", FileMode.Create, FileAccess.Write);
            formatter.Serialize(stream, obj);
            stream.Close();
            stream = new FileStream("E:\\ExampleNew.txt", FileMode.Open, FileAccess.Read);
            Tutorial objnew = (Tutorial)formatter.Deserialize(stream);
            Console.WriteLine(objnew.ID);
            Console.WriteLine(objnew.Name);
            Console.ReadKey();
        }
    }
}

Пояснение кода:

  1. Открываем файл в режиме чтения.
  2. Десериализуем бинарные данные обратно в экземпляр Tutorial.
  3. Печатаем ID и Name в консоль.

Запуск программы в Visual Studio даёт следующий вывод:

Вывод:

Сериализация и десериализация в C#: практический пример

Как видно, значения корректно восстановлены из файла.

Резюме

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

Язык C

  1. Классы и объекты в C#: Фундаменты надёжного ООП
  2. Абстрактные классы и методы в C#: практическое руководство
  3. Частичные классы и методы в C#: понимание и применение
  4. Sealed-классы и sealed-методы в C#: когда использовать, примеры и повышение безопасности кода
  5. Мастерство файловых операций в Java с java.io: создание, чтение, запись и удаление
  6. Операторы в C++: типы, примеры и практические программы
  7. C++ Struct vs Class: ключевые отличия, синтаксис и лучшие сценарии использования
  8. Абстрактные классы в C#: практическое руководство с примерами кода
  9. Чтение файлов в Java с BufferedReader — Практическое руководство с примерами
  10. Понимание type() и isinstance() в Python: практические примеры