Json-сериализация в C#

Всем доброго времени суток. На связи Алексей Гулынин. В прошлых двух статьях мы поговорили про бинарную сериализацию и про XML-сериализацию. В данной статье я бы хотел рассказать про JSON-сериализацию в C#.
Для того, чтобы выполнить данную сериализацию необходимо создать объект класса "DataContractJsonSerializer".
Данный класс располагается в пространстве имён "System.Runtime.Serizalization.Json".
Отличие данного сериализатора в том, что вызываются не методы "Serialize()" и "Deserialize", а методы "WriteObject()" и "ReadObject()". Также отличие заключается в том, что при создании объекта данного класса, в конструкторе необходимо указать тип объекта, который собираемся сериализовать. В остальном всё тоже самое, как и в прошлых двух примерах.
Если при добавлении "using System.Runtime.Serialization.Json;" компилятор будет ругаться, то необходимо добавить ссылку на сборку "System.Runtime.Serialization" в проект.
Ниже приведен код, который выполняет JSON-сериализацию:
using System; using System.Text; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Json; namespace TestApplicationForStudy { class Program { static void Main(string[] args) { // Создаём объект класса Room room1 = new Room(); room1.Length = 5; room1.Width = 4; room1.HasFurniture = true; // Создаём сериалайзер DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(Room)); // Создаём поток FileStream buffer = File.Create("C:\\room.txt"); // Сериализуем объект jsonSerializer.WriteObject(buffer, room1); buffer.Close(); Console.ReadLine(); } } [Serializable] public class Room : ISerializable { public double Width { get; set; } public double Length { get; set; } [NonSerialized] public int numberOfWindows; public bool HasFurniture { get; set; } public Room() { } public void GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("Width", this.Width); info.AddValue("Length", this.Length); info.AddValue("hasFurniture", this.HasFurniture); } public Room(SerializationInfo info, StreamingContext context) { this.Width = (double)info.GetValue("Width", typeof(double)); this.Length = (double)info.GetValue("Length", typeof(double)); this.HasFurniture = (bool)info.GetValue("hasFurniture", typeof(bool)); } } }
Если после этого посмотреть на файл "room.txt", то он будет выглядеть следующим образом: "{«Width»:4,»Length»:5,»hasFurniture»:true}". Мы видим, что Json-сериализация представляет из себя создание объекта на Javascript.
Код для десериализации:
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(Room)); // Открываем наш файл FileStream buffer = File.OpenRead("C:\\room.txt"); Room room1 = jsonSerializer.ReadObject(buffer) as Room; Console.WriteLine("Длина = {0}, Ширина = {1}", room1.Length, room1.Width); if (room1.HasFurniture) Console.WriteLine("Мебель есть"); else Console.WriteLine("Мебели нет!"); buffer.Close(); Console.ReadLine();
В данной статье вы узнали про JSON-сериализацию в C#.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.