Dev Arksoft
  • Arksoft Developer Network
  • Ağustos 2023
    • Angularda DOM (Document Object Model) Manipülasyonu
    • Angular’da Routing
    • Representational State Transfer (REST)
    • .Net Framework için Local NugetPackage
    • Agile Nedir?
  • Temmuz 2023
    • Angular HTTP Interceptors
    • Angularda Promise ve Observable
    • Mongo DB Kullanımı
  • Haziran 2023
    • Angular Validators
  • Mayıs 2023
    • Docker Uzerine Redis Kurulumu ve .Net Core ile Redise Erişim
  • Nisan 2023
    • Angular 14 Componentler Arası İletişim
  • Şubat 2023
    • JMeter ile Performans Testi
  • Ocak 2023
    • Windows Giriş Ekranında C# Form Açmak
  • Temmuz 2022
    • Regular Expressions
  • Haziran 2022
    • RSA Şifreleme
    • AutoMapper Kullanımı
    • Permutasyon ve Kombinasyon
    • Generic Repository Pattern
    • Levenshtein Algoritması
    • HTML 5’e Giriş
    • Graph Yapılar
  • Mayıs 2022
    • IQueryable IEnumerable Farklar
    • Sıralama Algoritmaları
  • Şubat 2022
    • ADFS Custom 2FA Integration
    • Reacta Giriş ve Reactın Temel Prensipleri
    • TypeScript Kullanımı
    • Serialization Kullanımı
    • Log4Net Kullanımı
    • Collections Yapıları
    • Windows Service Projesini Debug Etme ve Harici Exe Çalıştırma
    • Culture ve DateTime Kullanımı
    • Reflection Kullanımı
    • Steganografi Teknikleri
    • ElasticSearch Kullanımı
    • SWAGGER ve JWT TOKEN BASED WEBAPI Kullanımı
    • LINQ Komutları Kullanımı
    • Image Processing İşlemleri Kullanımı
Powered by GitBook
On this page
  1. Şubat 2022

Serialization Kullanımı

Husamettin Elalmis

Merhaba arkadaşlar, bu yazıda sizlere Serialization kavramından bahsecedeğim.

Serialization Nedir?

  • Serialization, bir objeyi "Serileştirme" demektir.

    • Serileştirme, objenin belirli bir formatta saklanarak bir ortamda tutulmasıdır.

    • Ortamdan kasıt, serileştirilmiş bir objenin saklanacağı yerdir

      • File ortamı olabilir

      • Bellek ortamı olabilir

      • Database ortamı olabilir

      • …

  • Serileştirme formatları genellikle şunlardır

    • Binary format

      • Bu tür dosyaların uzantısına ".bin" veririz. Böylece binary formatında olduğunu vurgulamış oluruz (uzantı herşey olabilir, bin genel bir tercihtir)

    • XML format

      • Bu tür dosyaların uzantısına ".xml" veririz. Böylece XML formatında olduğunu vurgulamış oluruz (uzantı herşey olabilir, xml genel bir tercihtir)

    • Json format

      • Bu tür dosyaların uzantısına ".json" veririz. Böylece Json formatında olduğunu vurgulamış oluruz (uzantı herşey olabilir, json genel bir tercihtir)

    • Text format

      • Bu tür dosyaların uzantısına ".txt" veririz. Böylece text formatında oludğunu vurgulamış oluruz (uzantı herşey olabilir, txt genel bir tercihtir)

        • Bir dosyayı diske yazmak ve geri okumak, serialization işleminin en yalın halidir.

  • Bir obje serileştirildiğinde belirli bir formata bürünür

    • Binary format olabilir

    • XML format olabilir

    • Json format olabilir

  • Bir objeyi geriye serileştirdiğimizde (DeSerialization) bürünmüş olan formattan orjinal olan formata geri döndürmüş oluruz

    • Bir classı serileştirdiğimizde bu bir formata bürünür

    • Bürünmüş olan formattan geriye serileştirdiğimizde (DeSerialization) orjinal class verisini elde ederiz

  • Serialization ve Deserialization kavramı birbirini tamamlayan kavramlardır

    • Serileştiririz ve zamanı geldiğinde geri okuruz

Neden Serialization Kullanılır?

  • Serialization'un amacı, bir objeyi başka bir ortama taşımaktır.

    • Örneğin bir class objesinin içeriğini network ortamında başka bir bilgisayara göndermek istersek bunu Serileştirerek yaparız.

      • Class objesini bulunduğumuz makinada serileştiririz (Serialization), karşı makinaya göndeririz. Karşı makina bunu geriye çözümler (Deserialization) ve orjinal datayı elde eder

  • SOAP, WCF, REST servislerinde bir standard haline gelmiştir

    • SOAP servisleri, verileri XML formatında gönderir/alır.

    • WCF servisleri genellikle XML formatında verileri gönderir/alır. Senaryoya göre bazen Json da kullanılabilmektedir.

    • REST servisleri (API) genellikle Json formatında verileri gönderir/alır.

    • Eski uygulamalar ise genellikle Binary formatında verileri gönderir/alır.

  • Ram'deki anlik veriyi bir ortama saklama istersek bunu Serialization (serileştirme) işlemi yaparak çözümleriz. Bunun başka bir yöntemi yoktur.

    • Reflection ile okunarak manuel olarak da serialization yapılabilir, aynı kapıya çıkar. Bir ortama saklamak istersek bunu bir formata büründürmemiz gerekmektedir.

Önemli Notlar

  • Binary formatında serileştirme için ilgili classların başına [Serializable] attributesi eklenir.

  • XML formatında serileştirme için XML namespace'inden faydalanılır.

  • Json formatında serileştirme için Newtonsoft nuget package librarysinden faydalanılır

  • Serileştirme yöntemleri arasında en efektif ve etkin kullanım, Json formatına aittir. Bu nedenle json formatı standard hale gelmiş durumdadır.

  • Etkinlik sırasına göre sıralarsak şöyle sıralarız

    • Json > XML > BinaryFormat > TextFormat

Çıktılar

  • Uygulamanın çalışır hali

  • Serileştirilmiş dosya örnekleri

  • Binary (.bin) dosyaları bu şekilde görünür

  • XML (.xml) dosyaları bu şekilde görünür

  • Json (.json) dosyaları bu şekilde görünür

Program.cs

 

using Newtonsoft.Json;

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Runtime.Serialization;

using System.Runtime.Serialization.Formatters.Binary;

using System.Text;

using System.Xml;

using System.Xml.Serialization;

 

namespace SerializationArge

{

[Serializable]


public
class
Kisi

{


public
string AdSoyad { get; set; }


public DateTime DogumTarihi { get; set; }


public
bool IsWorking { get; set; }


public
int Kilo { get; set; }

 


public
override
string ToString()

{


return
$”{AdSoyad}
{DogumTarihi}
{IsWorking}
{Kilo}“;

}

}

 


class
Program

{


static
void Main(string[] args)

{

List<Kisi> list = new List<Kisi>();

list.Add(new Kisi() { AdSoyad = “Hüsamettin ELALMIŞ”, DogumTarihi = new DateTime(1976, 3, 13), IsWorking = true, Kilo = 80 });

 


// Binary

Console.WriteLine(“Binary serialization”);

BinarySerialize(list, “serialized.bin”);

 

Console.WriteLine(“Binary deserialization”);


var res1 = BinaryDeserialize(“serialized.bin”);


if (res1 != null && res1.Any())

{

Console.WriteLine(res1[0]);

Console.WriteLine();

}

 


// XML

Console.WriteLine(“XML serialization”);

XMLSerialize(list, “serialized.xml”);

 

Console.WriteLine(“XML deserialization”);


var res2 = XMLDeserialize(“serialized.xml”);


if (res2 != null && res2.Any())

{

Console.WriteLine(res2[0]);

Console.WriteLine();

}

 


// Json

Console.WriteLine(“Json serialization”);

JsonSerialize(list, “serialized.json”);

Console.WriteLine(“Json deserialization”);


var res3 = JsonDeserialize(“serialized.json”);


if (res3 != null && res3.Any())

{

Console.WriteLine(res3[0]);

Console.WriteLine();

}

 

Console.WriteLine(“ok”);

Console.ReadLine();

}

 


private
static
void BinarySerialize(List<Kisi> list, string fileName)

{


try

{

IFormatter formatter = new BinaryFormatter();


using (Stream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write))

{

formatter.Serialize(stream, list);

stream.Close();

}

}


catch (Exception ex)

{


// ..

}

}

 


private
static List<Kisi> BinaryDeserialize(string fileName)

{

List<Kisi> res = null;

 


try

{


if (System.IO.File.Exists(fileName))

{

IFormatter formatter = new BinaryFormatter();


using (Stream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))

{

res = (List<Kisi>)formatter.Deserialize(stream);

stream.Close();

}

}

}


catch (Exception ex)

{


// ..

}

 


return res;

}

 


private
static
void XMLSerialize(List<Kisi> list, string fileName)

{


try

{


var serializer = new XmlSerializer(typeof(List<Kisi>));


using (Stream fs = new FileStream(fileName, FileMode.Create))

{

XmlWriter writer = new XmlTextWriter(fs, Encoding.UTF8);

serializer.Serialize(writer, list);

writer.Close();

}

}


catch (Exception ex)

{


// ..

}

}

 


private
static List<Kisi> XMLDeserialize(string fileName)

{

List<Kisi> res = null;

 


try

{


if (System.IO.File.Exists(fileName))

{

XmlSerializer serializer = new XmlSerializer(typeof(List<Kisi>));


using (Stream reader = new FileStream(fileName, FileMode.Open))

{

res = (List<Kisi>)serializer.Deserialize(reader);

}

}

}


catch (Exception ex)

{


// ..

}

 


return res;

}

 


private
static
void JsonSerialize(List<Kisi> list, string fileName)

{


try

{


var res = JsonConvert.SerializeObject(list, Newtonsoft.Json.Formatting.Indented);

System.IO.File.WriteAllText(fileName, res);

}


catch (Exception ex)

{


// ..

}

}

 


private
static List<Kisi> JsonDeserialize(string fileName)

{

List<Kisi> res = null;

 


try

{


if (System.IO.File.Exists(fileName))

{


var json = System.IO.File.ReadAllText(fileName, Encoding.UTF8);

res = JsonConvert.DeserializeObject<List<Kisi>>(json);

}

}


catch (Exception ex)

{


// ..

}

 


return res;

}

}

}

Sonuç

  • Serialization ve Deserialization işlemlerini sıkça kullanırız

  • En çok kullandığımız format Json formatıdır

    • NewtonJson kütüphanesini kullanıyoruz

  • Buradaki örnekler static kavramsal olarak aktarılmıştır

    • Bahsi geçen örneklerin tamamı için generic methodların yazılmış hali frameworkumuzde mevcuttur.

Saygılarımla,

Hüsamettin ELALMIŞ – 14.08.2021

husamettin.elalmis@arksoft.com.tr

PreviousTypeScript KullanımıNextLog4Net Kullanımı

Last updated 2 years ago