C# Serialization nedir?

Bir sınıf örneğindeki(instance) verinin bir yerde depolanırken veya bir yere transfer edilirken programlama dilinden bağımsız standartlara dönüştürme işlemine serileştirme (serialization) denir.

Verilerin depolanması veya transfer edilmesi için Binary, SOAP, JSON veya XML gibi standartlar kullanılabilir.

Deserialization bu işin tam tersidir. (Serileştirilmiş verinin dönüştürme işlemi sonucunda belli sınıfın örneğine(instance) dönüştürülmesi işlemidir. )

Serileştirme işlemi veya tersi işlemleri için .Net Çatısında (Framework) System.Net.Runtime.Serialization kullanılır.

Binary Seriliazation

System.Runtime.Serialization.Formatters.Binary kullanılır. Serileştirme işleminde bir sınıfın örneği(instance) byte dizisine(array) dönüştürülür.

System.IO kütüphanesinde; Stream (Kanal) byte veri türünde girdi veya çıktı bilgileri içerir. Bir dosya, bellek (memory), ağ(network) gibi farklı kaynaklardan okuma veya yazma işlemleri için kullanılır.

Stream, baytları (bytes) kaynağa transfer etmek veya depolamak için standart metotlar sağlayan soyut(abstract) bir sınıftır. MemoryStream sınıfı, Stream sınıfı miras alır. MemoryStream, bellekte depolanan baytları okur veya yazar.

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Person person = new Person();
            person.name = "Cihan";
            person.surName = "AŞAN";
            person.age = 32;

            MemoryStream stream = new MemoryStream();
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(stream, person);

            stream.Dispose();

            Console.ReadKey();
        }
        
    }
    [Serializable]
    public class Person
    {
        public string name { get; set; }
        public string surName { get; set; }
        public int age { get; set; }
    }
}

Dispose() metodundan önce formatter.Serialize(…) metotu sayesinde person örneği(instance) stream örneğine(instance) byte veri türünde serileştirilir.

Aşağıdaki Binary Deserialization örneğidir.

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Person person = new Person();
            person.name = "Cihan";
            person.surName = "AŞAN";
            person.age = 32;

            MemoryStream stream = new MemoryStream();
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(stream, person);

            stream.Position = 0; //Position 236 dan 0 a getirildi.

            MemoryStream _stream = new MemoryStream(stream.ToArray());        
            Person _person = (Person)formatter.Deserialize(stream);

            Console.WriteLine("Name : " + _person.name);
            Console.WriteLine("Surname : " + _person.surName);
            Console.WriteLine("Age : " + _person.age);

            stream.Dispose();
            _stream.Dispose();

            Console.ReadKey();
        }
        
    }
    [Serializable]
    public class Person
    {
        public string name { get; set; }
        public string surName { get; set; }
        public int age { get; set; }
    }
}

Çıktı :

c# binary deserialization nedir
c# binary deserialization nedir

JSON Seriliazation

Bir sınıfın örneğini(instance) JSON(JavaScript Object Notation) notasyonuna dönüştürme ( veya tam tersi ) işlemidir.

– System.Runtime.Serialization

– DataContractJsonSerializer

Bu örnekte serialization ve deserialization işlemini göstermek için data contract kullanılır.

References > Add Reference System.Runtime.Serialization için kontrol ediniz.

c# JSON Serilestirme
c# JSON Serilestirme
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Person person = new Person();
            person.name = "Cihan";
            person.surName = "AŞAN";
            person.age = 32;

            MemoryStream stream = new MemoryStream();
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
            ser.WriteObject(stream, person);

            Console.WriteLine(Encoding.UTF8.GetString(stream.ToArray(), 0, stream.ToArray().Length));

            stream.Close();
            Console.ReadKey();
        }

    }
    [DataContract]
    public class Person
    {
        [DataMember]
        public string name { get; set; }
        [DataMember]
        public string surName { get; set; }
        [DataMember]
        public int age { get; set; }
    }
}

Çıktı :

json serialization c# nedir
json serialization c# nedir

Alternatif stream örneğini(instance) okuma;

stream.Position = 0;
StreamReader sr = new StreamReader(stream);
Console.WriteLine(sr.ReadToEnd());

WriteObject(…) metodu person örneğini(instance) JSON notasyonuna serileştiriyor.

JSON Deseriliazation örneği;

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Person person = new Person();
            person.name = "Cihan";
            person.surName = "AŞAN";
            person.age = 32;

            MemoryStream stream = new MemoryStream();
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
            ser.WriteObject(stream, person);

            //Deserialization
            stream.Position = 0;
            Person p2 = (Person)ser.ReadObject(stream);
            Console.WriteLine("Name :" + p2.name);
            Console.WriteLine("Surname :" + p2.surName);
            Console.WriteLine("Age :" + p2.age);

            stream.Close();
            Console.ReadKey();
        }

    }
    [DataContract]
    public class Person
    {
        [DataMember]
        public string name { get; set; }
        [DataMember]
        public string surName { get; set; }
        [DataMember]
        public int age { get; set; }
    }
}

Çıktı :

json deserialization nedir c#
json deserialization nedir c#

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir