Сериализация и десериализация в C# с пример
⚡ Умно обобщение
Сериализацията в C# преобразува обект в поток от байтове, така че той да може да бъде записан във файл или изпратен между приложения; десериализацията възстановява обекта. Тук ще научите как да сериализирате и десериализирате обекти с примери.

Сериализация и десериализация в C#
Концепцията за сериализация и десериализация се използва винаги, когато данни, отнасящи се до обекти, трябва да бъдат изпратени от едно приложение към друго. Сериализацията се използва за експортиране на данни от приложението във файл. След това приложението-цель използва десериализация, за да...tracданните от приложението за по-нататъшна употреба.
Сериализацията е концепция, при която C# клас обекти се записват или сериализират във файлове. Да приемем, че имате C# клас, наречен Tutorial. И класът има 2 свойства на ID и име на уроци.
Сериализиране може да се използва за директно записване на свойствата на данните на класа Tutorial във файл. Десериализацията се използва за четене на данните от файла и повторно конструиране на обекта Tutorial.
Видове сериализация в C#
C# поддържа няколко формата за сериализация и вие избирате един въз основа на това къде ще се използват данните. Основните типове са изброени по-долу.
- Бинарна сериализация преобразува обект в компактен двоичен поток. Бърз е, но не е четим от човек и е обвързан с .NET.
- XML сериализация използва класа XmlSerializer, за да запише публичните свойства на обекта в четлив XML файл.
- JSON сериализация използва System.Text.Json или Newtonsoft.Json за създаване на лек JSON, най-разпространеният формат за уеб API.
- SOAP сериализация форматира данните като SOAP съобщения за по-стари уеб услуги.
Как да сериализирате обект в C#
Нека да разгледаме пример как можем да постигнем това.
В нашия пример ще изпълним следните стъпки на високо ниво в кода
- Създайте клас, наречен Tutorial, който има 2 свойства, а именно ID и Name
- След това ще създадем обект от класа и ще присвоим стойност „1“ на свойството ID и стойност „.Net“ на свойството име.
- След това ще използваме сериализация, за да сериализираме горния обект във файл, наречен Example.txt
- И накрая, ще използваме десериализация, за да десериализираме обекта от файла и да покажем стойностите в конзолата.
Въведете кода по-долу във файла program.cs на конзолното приложение.
Стъпка 1) Добавете класа.
Първата стъпка е да добавите класа, който ще се използва за сериализация
Code Обяснение:
- Класът, който трябва да бъде сериализиран, трябва да има атрибут [Serializable]. Това е ключова дума в C#. След това тази ключова дума се прикачва към класа Tutorial. Ако не споменете този атрибут, ще получите грешка, когато се опитате да сериализирате класа.
- Следва дефиницията на класа, който ще бъде сериализиран. Тук дефинираме клас, наречен „Tutorial“ и предоставяме 2 свойства, едното е „ID“, а другото е „Name“.
Стъпка 2) Създайте обекта.
В тази стъпка първо ще създадем обекта на класа Tutorial и ще го сериализираме във файла, наречен Example.txt
Code Обяснение:
- Първо създаваме обект от класа Tutorial. След това присвояваме стойност „1“ на ID и „.net“ на свойството име.
- След това използваме класа за форматиране, който се използва за сериализиране или конвертиране на обекта в двоичен формат. Данните във файла при сериализация се извършват в двоичен формат. След това създаваме обект на файлов поток. Обектът на файловия поток се използва за отваряне на файла Example.txt за писане. Ключовите думи FileMode.Create и FileMode.Write се използват, за да упоменат конкретно, че файлът трябва да бъде отворен за писане.
- Накрая използваме метода Serialize, за да прехвърлим двоичните данни във файла. След това затваряме потока след записа операция завършено е.
Стъпка 3) Използвайте десериализация.
И накрая, за да гарантираме, че данните присъстват във файла, използваме десериализация, за да десериализираме обекта от файла.
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 Обяснение:
- Ние създаваме обекта "поток”, за да отворите файла Example.txt в режим само за четене.
- След това използваме класа за форматиране, който се използва за десериализиране на обекта, който се съхранява във файла Example.txt. Върнатият обект е зададен на обект objnew.
- И накрая, показваме свойствата на обекта „objnew“ на конзолата, като използваме свойствата „ID“ и „name“.
Когато горният код е зададен и проектът се изпълнява с помощта на Visual Studio, ще получите резултата по-долу.
Изход: -
Можете да видите от горния резултат, че стойностите от файла са десериализирани правилно и показани в конзолата.
JSON сериализация в C#
JSON е най-широко използваният формат за съвременни приложения и уеб API. Вграденият System.Text.Json namespace сериализира и десериализира обекти с едно извикване на метод, както е показано по-долу.
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




