Серіалізація та десеріалізація в C# з прикладом

⚡ Розумний підсумок

Серіалізація в C# перетворює об'єкт на потік байтів, щоб його можна було зберегти у файл або надіслати між програмами; десеріалізація перебудовує об'єкт. Тут ви навчитеся серіалізувати та десеріалізувати об'єкти на прикладах.

  • 🔄 Що це: Серіалізація записує об'єкт C# у файл, а десеріалізація зчитує його назад.
  • 🏷️ [Сериалізується]: Класу потрібен атрибут [Serializable], перш ніж його можна буде серіалізувати.
  • 💾 Бінарний формат: BinaryFormatter з FileStream записує об'єкт у двійковій формі.
  • 🧩 Формати: C# також підтримує серіалізацію XML та JSON для зручного читання виводу.
  • 🤖 Допомога ШІ: Інструменти штучного інтелекту, такі як GitHub Copilot, миттєво генерують код серіалізації.

Серіалізація та десеріалізація на C#

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

Концепція серіалізації та десеріалізації використовується щоразу, коли дані, що стосуються об'єктів, потрібно надсилати з однієї програми до іншої. Серіалізація використовується для експорту даних програми у файл. Потім цільова програма використовує десеріалізацію для...tracдані з програми для подальшого використання.

Серіалізація — це концепція, за якої об’єкти класу C# записуються або серіалізуються у файли. Припустімо, у вас є клас C# під назвою Tutorial. І клас має 2 властивості ID та назву Tutorials.

Серіалізацію можна використовувати для безпосереднього запису властивостей даних класу Tutorial у файл. Десеріалізація використовується для читання даних із файлу та повторного створення об’єкта Tutorial.

Типи серіалізації в C#

C# підтримує кілька форматів серіалізації, і ви обираєте той, який залежить від того, де будуть використовуватися дані. Основні типи перелічені нижче.

  • Бінарна серіалізація перетворює об'єкт на компактний двійковий потік. Це швидко, але незрозуміло для людини та пов'язано з .NET.
  • XML-серіалізація використовує клас XmlSerializer для запису публічних властивостей об'єкта в читабельний XML-файл.
  • Серіалізація JSON використовує System.Text.Json або Newtonsoft.Json для створення легкого JSON, найпоширенішого формату для веб-API.
  • Серіалізація SOAP форматує дані як SOAP-повідомлення для старіших веб-сервісів.

Як серіалізувати об'єкт у C#

Давайте розглянемо приклад того, як ми можемо цього досягти.

У нашому прикладі ми збираємося виконати наведені нижче кроки високого рівня в коді

  1. Створіть клас під назвою Tutorial, який має 2 властивості, а саме ID та Name
  2. Потім ми створимо об’єкт із класу та призначимо значення «1» властивості ID і значення «.Net» властивості name.
  3. Потім ми використаємо серіалізацію, щоб серіалізувати вищевказаний об’єкт у файл під назвою Example.txt
  4. Нарешті, ми використаємо десеріалізацію для десеріалізації об’єкта з файлу та відображення значень у консолі.

Введіть наведений нижче код у файл program.cs консольної програми.

Крок 1) Додайте клас.

Першим кроком є ​​додавання класу, який буде використовуватися для серіалізації

Серіалізація об'єкта в C#

Code Пояснення:

  1. Клас, який потрібно серіалізувати, повинен мати атрибут [Serializable]. Це ключове слово в C#. Потім це ключове слово додається до класу Tutorial. Якщо ви не вкажете цей атрибут, ви отримаєте помилку під час спроби серіалізувати клас.
  2. Далі йде визначення класу, який буде серіалізовано. Тут ми визначаємо клас під назвою «Навчальний посібник» і надаємо 2 властивості, одна — «ID», а інша — «Name».

Крок 2) Створіть об'єкт.

На цьому кроці спочатку ми створимо об’єкт класу Tutorial і серіалізуємо його у файл під назвою Example.txt

Серіалізація об'єкта в C#

Code Пояснення:

  1. Спочатку ми створюємо об’єкт класу Tutorial. Потім ми призначаємо значення «1» ID і «.net» властивості name.
  2. Потім ми використовуємо клас formatter, який використовується для серіалізації або перетворення об’єкта в двійковий формат. Дані у файлі під час серіалізації виконуються у двійковому форматі. Далі ми створюємо об’єкт файлового потоку. Об’єкт файлового потоку використовується для відкриття файлу Example.txt для написання. Ключові слова FileMode.Create і FileMode.Write використовуються, щоб конкретно згадати, що файл слід відкрити для запису.
  3. Нарешті, ми використовуємо метод Serialize для передачі двійкових даних у файл. Потім ми закриваємо потік після запису операція завершено.

Крок 3) Використовуйте десеріалізацію.

Нарешті, щоб переконатися, що дані присутні у файлі, ми використовуємо десеріалізацію для десеріалізації об’єкта з файлу.

Серіалізація об'єкта в C#

using System;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
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();
  }
 }
}

Code Пояснення:

  1. Створюємо об'єкт "потік”, щоб відкрити файл Example.txt у режимі лише читання.
  2. Потім ми використовуємо клас форматера, який використовується для десеріалізації об’єкта, який зберігається у файлі Example.txt. Повернений об’єкт має значення objnew.
  3. Нарешті, ми показуємо властивості об’єкта “objnew” на консолі за допомогою властивостей “ID” і “name”.

Коли наведений вище код встановлено, а проект запускається за допомогою Visual Studio, ви отримаєте наведений нижче результат.

Вихід:-

Серіалізація об'єкта в C#

Ви можете бачити з наведених вище виводів, що значення з файлу були правильно десеріалізовані та відображені в консолі.

Серіалізація JSON в C#

JSON – це найпоширеніший формат для сучасних програм та веб-API. Вбудований System.Text.Json Простір імен серіалізує та десеріалізує об'єкти за допомогою одного виклику методу, як показано нижче.

using System;
using System.Text.Json;
namespace DemoApplication
{
  class Tutorial
  {
    public int ID { get; set; }
    public string Name { get; set; }
  }
  class Program
  {
    static void Main(string[] args)
    {
      Tutorial obj = new Tutorial { ID = 1, Name = ".Net" };
      string json = JsonSerializer.Serialize(obj);
      Console.WriteLine(json);

      Tutorial objnew = (Tutorial)JsonSerializer.Deserialize(json, typeof(Tutorial));
      Console.WriteLine(objnew.Name);
      Console.ReadKey();
    }
  }
}

вихід:

{"ID":1,"Name":".Net"}
.Net

Поширені запитання

Серіалізація перетворює об'єкт C# на потік байтів (двійковий, XML або JSON), щоб його можна було зберегти у файл або надіслати до іншої програми. Десеріалізація перебудовує об'єкт з цих даних.

Атрибут [Serializable] позначає клас, щоб його об'єкти можна було серіалізувати. Без нього бінарна серіалізація викидає виняток під час спроби записати об'єкт у файл.

C# підтримує двійкову серіалізацію (компактну, лише для .NET), XML-серіалізацію через XmlSerializer, JSON-серіалізацію через System.Text.Json та SOAP-серіалізацію для старіших веб-сервісів.

Серіалізація записує дані об'єкта у файл або потік, тоді як десеріалізація зчитує ці дані назад та реконструює оригінальний об'єкт у пам'яті.

BinaryFormatter зараз застарів і вважається небезпечним, оскільки він може виконувати шкідливий код під час десеріалізації. Microsoft Для нових застосунків рекомендує System.Text.Json або XmlSerializer.

Помічники штучного інтелекту, такі як GitHub Copilot, автоматично завершують виклики серіалізації та десеріалізації, додають атрибут [Serializable] та генерують код серіалізації JSON або XML з короткого коментаря.

Так. Інструменти на базі штучного інтелекту генерують класи моделей, вибирають між форматами JSON, XML та бінарними, а також додають обробку помилок, щоб ваш код серіалізації був безпечним та повним.

Бінарна серіалізація використовує System.Runtime.Serialization.Formatters.Binary, JSON використовує System.Text.Json, а XML використовує System.Xml.Serialization.

Підсумуйте цей пост за допомогою: