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

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#.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *