В C# сериализация и десериализация объектов позволяют сохранять и восстанавливать данные объектов в бинарном или текстовом форматах. Сериализация преобразует объект в последовательность байтов или текста, которую можно записать в файл, передать по сети или сохранить в базе данных. Десериализация, в свою очередь, выполняет обратное преобразование и восстанавливает объект из сохраненных данных.
Существует несколько подходов к сериализации и десериализации объектов в C#. Давайте рассмотрим основные варианты.
1. Бинарная сериализация с использованием класса BinaryFormatter
.
Для сериализации и десериализации объекта с использованием бинарного формата можно воспользоваться классом BinaryFormatter
. Этот класс позволяет сериализовывать и десериализовывать объекты в формате бинарного потока. Пример кода:
using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; // Пример класса, который будет сериализовываться [Serializable] public class MyClass { public int MyProperty { get; set; } public string MyProperty2 { get; set; } } public static void Main() { MyClass obj = new MyClass() { MyProperty = 42, MyProperty2 = "Hello, World!" }; // Сериализация BinaryFormatter formatter = new BinaryFormatter(); using (FileStream fs = new FileStream("myobject.bin", FileMode.Create)) { formatter.Serialize(fs, obj); } // Десериализация using (FileStream fs = new FileStream("myobject.bin", FileMode.Open)) { MyClass newObj = (MyClass)formatter.Deserialize(fs); Console.WriteLine(newObj.MyProperty); Console.WriteLine(newObj.MyProperty2); } }
2. XML сериализация с использованием класса XmlSerializer
.
XML сериализация позволяет сохранять и восстанавливать объекты в формате XML. C# предоставляет класс XmlSerializer
, который упрощает этот процесс. Пример кода:
using System; using System.IO; using System.Xml.Serialization; [Serializable] public class MyClass { public int MyProperty { get; set; } public string MyProperty2 { get; set; } } public static void Main() { MyClass obj = new MyClass() { MyProperty = 42, MyProperty2 = "Hello, World!" }; // Сериализация в формате XML XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyClass)); using (StreamWriter writer = new StreamWriter("myobject.xml")) { xmlSerializer.Serialize(writer, obj); } // Десериализация из формата XML using (StreamReader reader = new StreamReader("myobject.xml")) { MyClass newObj = (MyClass)xmlSerializer.Deserialize(reader); Console.WriteLine(newObj.MyProperty); Console.WriteLine(newObj.MyProperty2); } }
3. JSON сериализация с использованием класса JsonConvert
.
JSON сериализация позволяет сохранять и восстанавливать объекты в формате JSON. В C# для этой цели может использоваться библиотека Newtonsoft.Json
, которая предоставляет класс JsonConvert
для сериализации и десериализации объектов. Пример кода:
using System; using System.IO; using Newtonsoft.Json; public class MyClass { public int MyProperty { get; set; } public string MyProperty2 { get; set; } } public static void Main() { MyClass obj = new MyClass() { MyProperty = 42, MyProperty2 = "Hello, World!" }; // Сериализация в формате JSON string json = JsonConvert.SerializeObject(obj); File.WriteAllText("myobject.json", json); // Десериализация из формата JSON string jsonContent = File.ReadAllText("myobject.json"); MyClass newObj = JsonConvert.DeserializeObject<MyClass>(jsonContent); Console.WriteLine(newObj.MyProperty); Console.WriteLine(newObj.MyProperty2); }
Это лишь некоторые примеры сериализации и десериализации объектов в C# с использованием различных форматов. В зависимости от ваших требований и специфики приложения можно выбрать наиболее подходящий способ работы с данными объектов.