Makale Özeti

Nesneleri diske kaydetmek veya Internet üzerinden başka uygulamamıza göndermek için Nesneleri dizileştirmemiz gerekir. Bu yazıda bu işlemin nasıl yapıldığı açıklanmaktadır.

Makale


Nesneleri Dizileştirme


Kendi yazdığımız nesneleri binary biçimde kaydetmek, veya başka bir uygulamaya göndermek istiyorsak nesneleri  dizisel hale getirmemiz(serileştirmemiz) gerekir. C
#’la bunu yapmak oldukça kolaydır.

Bir nesneyi dizileştirilebilir yapmak için yapmamız gereken nesnenin sınıfını [Serializable] etiketiyle işaretlemektir. Bu etiketi koyduktan sonra artık CLR nesnemizi dizisel hale getirebilecektir. Yalnız buradaki önemli nokta, CLR sadece int, string gibi ilkel türleri dizileştirebilir,  eğer sınıfımızın içinde kullandığımız, ilkel olmayan üyeler varsa bu üyelerin sınıfları da dizileştirilebilir olmalıdır.
 

      [Serializable]

      public class SerilestirilebilirSinif

      {

            public int seriSayi;

            public string seriString;

            public SerilestirilebilirSinif(int sayi,string isim)

            {       

                  seriSayi = sayi;

                  seriString = isim;

            }

            public void EkranaYaz()

            {

                  for(int i=0;i<seriSayi;i++)

                  {

                        Console.WriteLine(seriString);

                  }           

            }

}

 

Sınıfı dizileştirilebilir yaparken, dizileştirilmesini istemediğimiz üyeleri [NonSerialized] etiketiyle işaretlemeliyiz.

Nesneyi
dizileştirilebilir yaptıktan sonra artık bir biçimlendirici aracılığıyla nesnemizi diske kaydedebilir veya Internet üzerinden başka bir uygulamaya gönderebiliriz.

Yerel işlemler için BinaryFormatter biçimlendiricisi, Internet üzerindeki işlemler içinse SoapFormatter biçimlendiricisi kullanılır.

Önce sınıfımızdan bir nesne türetelim.
 


SerilestirilebilirSinif serilestirilecek= new SerilestirilebilirSinif(5,"Onur");
 


Şimdi nesnemizi
dizileştirmesi için bir BinaryFormatter nesnesi ve nesnemizin dizileştirilmiş halini diske yazabilmek için de bir FileStream nesnesi oluşturmalıyız.
 


BinaryFormatter bicimlendiricim = new BinaryFormatter();

FileStream yazicim = new FileStream("seriSinifim.snf",FileMode.Create);
 


Biçimlendiricimizin Serialize metodunu çağırdığımızda artık nesnemizin diziliştirilmiş hali diske yazılmış olacak.
 


bicimlendiricim.Serialize(yazicim,serilestirilecek);
 


Nesnemizi geri getirmek için ise biçimlendiricimizin Deserialize metodunu kullanıyor, ve döndürdüğü nesneyi de kendi sınıfımızın nesnesi haline getiriyoruz.
 


FileStream okuyucum = new FileStream("seriSinifim.snf",FileMode.Open);

BinaryFormatter bicimlendiricim2 = new BinaryFormatter();  

SerilestirilebilirSinif serilestirilmis = (SerilestirilebilirSinif) bicimlendiricim2.Deserialize(okuyucum);
 


Artık geri getirdiğimiz nesnemizi eski nesnemizmiş gibi kullanabiliriz.

Bu makalede nesneleri nasıl dizileştirip, geri getirebileceğimizi görmüş olduk. Her ne kadar bu örnekte diske yazıyor olduysak da, dizileştirme sayesinde nesnelerimizi artık hem daha farklı noktalarda (Dosya, Veritabanı vs.) saklayabilir, hem de başka uygulamalara Internet üzerinden gönderebiliriz.

İyi çalışmalar,
Onur Ağın
onur@onura.net

 


Kodun birleştirilmiş halini aşağıda bulabilirsiniz:

 

using System;

using System.IO;

using System.Runtime.Serialization;

using System.Runtime.Serialization.Formatters.Binary;

namespace Seri

{

       class Class1

      {

            [STAThread]

            static void Main(string[] args)

            {

                  //Yazdığımız sınıftan bir nesne oluşturalım

                  SerilestirilebilirSinif serilestirilecek= new SerilestirilebilirSinif(5,"Onur");

                  serilestirilecek.EkranaYaz();

                  // Nesnemizin serileştirilmiş halini diske yazmak için

                  // Bir FileStream nesnesi oluşturalım

                  FileStream yazicim = new FileStream("seriSinifim.snf",FileMode.Create);

               

                  // Şimdi de serileştirmeyi yapacak biçimlendiriciyi oluşturalım

                  BinaryFormatter bicimlendiricim = new BinaryFormatter();

 

                  // ve biçimlendiricimize nesnemizi serileştirelim

                  bicimlendiricim.Serialize(yazicim,serilestirilecek);

           

                  yazicim.Close();

 

                  // Nesnemiz diske yazıldı

               

                  //Şimdi nesnemizi diskten okuyup geri getirelim

                  Console.WriteLine("Nesnemizi geri getiriyoruz:");

 

                  // Diskten okumak icin bir FileStream nesnesi daha oluşturalım

                  FileStream okuyucum = new FileStream("seriSinifim.snf",FileMode.Open);

 

                  // Nesneyi deserialize edecek biçimlendiriciyi oluşturalım

                  BinaryFormatter bicimlendiricim2 = new BinaryFormatter();

 

                  // Şimdi de biçimlendirici aracılığıyla nesnemizi geri alalım

                  SerilestirilebilirSinif serilestirilmis = (SerilestirilebilirSinif) bicimlendiricim2.Deserialize(okuyucum);

                  okuyucum.Close();

                 

                  // Nesnemizin metodunu çağırıyoruz ve aynı çıktıyı alıyoruz

                  serilestirilmis.EkranaYaz();

 

            }

 

      }

      [Serializable]

      public class SerilestirilebilirSinif

      {

            public int seriSayi;

            public string seriString;

 

            public SerilestirilebilirSinif(int sayi,string isim)

            {

                  seriSayi = sayi;

                  seriString = isim;

            }

 

            public void EkranaYaz()

            {

                  for(int i=0;i<seriSayi;i++)

                  {

                        Console.WriteLine(seriString);

                  }

            }

}

}