C#nedir?com
 
YAZAR HAKKINDA
Gökhan Gürel
Gökhan Gürel
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
2 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: deserialize edilmis formumuza formumuzun islemi islemine islemini level1 nesnesi personel serialization serialize verinin verisini veriyi XML / Web Serv. Gökhan Gürel
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : XML / Web Serv.
Yayınlanma Tarihi : 2.6.2004
Okunma Sayısı : 50517
Yorum Sayısı : 1     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 10.8.2020
Turhal Temizer
Mac OS/X Removing CUDA 10.8.2020
Burak Selim Şenyurt
Sekiz Saatlik Sonsuz Döngü 10.8.2020
Burak Selim Şenyurt
Switch Case Kullanmadan Kod Yazılabilir mi? 10.8.2020
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
.NET ile "XML Serialization" ve "Deserialization" İşlemleri
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Serialization(serileştirme) kısaca nesnenin(object) bir kopyasını kullanarak o kopyayı kolayca ulaşılabilir bir forma çevirme ve nesnenin o anki durumunu koruma işlemidir. Serialization işlemini 3 farklı yöntemle gerçekleştirebiliriz. Bu yöntemler: Binary, SOAP ve XML’dir. Serialize(serileştirme) ettiğimiz nesneyi orjinal haline getirme işlemine ise Deserialization denir. Serialization işlemi uygulanmış olan nesnemiz biz Deserialization işlemi uygulamadıkça belirttiğimiz yerde kullandığımız Serialization(Binary, SOAP veya XML) formatındadır. Bu sayede nesnenin ömrü uygulamanın ömrüne bağlı olmaktan çıkar. Örneğin bu sayede bir uygulamayı sonlardırdığımız da verinin son durumunu ağ üzerindeki başka bir arkadaşımıza göndererek o arkadaşımızın verinin son halini kullanmasını sağlayabiliriz.

Biz şimdi bu formatlardan XML Serialization ve .NET Framework’ün bize bu işlem için sunduğu System.Xml.Serialization namespace’ine bakalım. 

İsterseniz konumuza girmeden önce aşağıda ki sorunun cevaplarını bir inceleyelim :

Neden XML Serialization kullanalım?

  • Verileri farklı uygulamalarda kullanmak için,
  • Verileri Internet üzerinden taşımak için. XML Serialization yapmamızın en önemli nedeni, XML’in open standart(açık standart) bir dil olması
  • Verilerin Internet üzerinden kolay bir şekilde aktarımını ve paylaşımını sağlamaktadır.
  • Bir uygulamaya dışarıdan XML verilerini almak için. Örneğin; bir ADO.NET uygulamasında XML verisini Deserialize edip o veriyi Dataset içinde kullanabiliriz.
  • Bir uygulamadaki nesnelerin son durumlarını korumak için.
Tabiki XML Serialization işleminin bazı kısıtlamaları var. Bunlar:  

  • Sadece public property(özellik) ve field’ler(alanlar) serialize(serileştirme) edilebilir.
  • Metot ve indeksleyiciler ile private tanımlanan üye elemanlar serileştirilemez.
  • Sadece verinin kendisi ve sınıfımızın yapısı serialize edilir. Veritipleri ve assembly bilgileri serileştirilmez.
  • Serileştirilecek sınıfta mutlaka bir varsayılan yapıcı metot bulunmak zorunda.
Eğer serialize edeceğimiz sınıf nesnesi yukarıda yazılı kısıtlamaları içeriyorsa Binary veya SOAP Serialization yöntemlerinden uygun bir tanesini seçmeliyiz.

XML Serialization’a genel olarak baktıktan sonra Serialization  ve Deserialization işlemlerini gerçekleştirmek için kullanacağımız ve System.Xml.Serialization  isim alanı içinde bulunan XmlSerializer sınıfına bir göz atalım

Sınıfımızın Serialize ve Deserialize işlemlerinde kullanılmak üzere 3 adet metodu bulunmaktadır. Bunlar:

Serialize()                    Nesneleri XML olarak serileştirmek için kullanılır.

Deserialize()                XML olarak serileştirmiş veriden  nesne oluşturmak için kullanılır.

CanDeserialize()          Verinin deserialize işlemine tabi tutulup tutulamayacağına karar verebilmemiz için kullanılır.

İsterseniz örnek bir uygulama üzerinde bu metotların kullanımını görelim.

1. Uygulamamız için "Windows Application" şablonunu seçiyoruz ve formumuza 5 adet Textbox, 2 adet Groupbox, 2 adet Button, 1 adet DateTimePicker ve 1 adet ComboBox ekliyoruz. Formumuzun görünümü şekilde görüldüğü olacak.

 


2. Projemize Serialize işlemi için kullanacağımız aşağıdaki gibi bir tane sınıf bildirimi ekliyoruz. Ve bu sınıf içerisinde(aynı isim alanında olmak üzere) ikinci bir sınıf daha bildiriyoruz.

public class Personel

       public string Ad; 
       public string Departman; 
       public string Email; 
       public int Yas; 
       public Para Maas; 
       public DateTime GirisTarihi;
}

public class Para

       public string Birim; 
       public decimal Tutar;
}


3. Sınıflarımızı oluşturduktan sonra Formumuza dönüyor ve öncelikle kullanacağımız sınıflar için gerekli olan isim alanlarını aşağıdaki gibi formumuza ekliyoruz.

using System.Text;
using System.IO;
using System.Xml.Serialization;

4 . Serileştirilecek nesnemizi tutmak için sınıf seviyesinde bir string değişken yaratıyoruz.

string strPersonelData;


5. Artık sıra Serialization işlemini gerçekleştirmek için gereken kodları yazmaya geldi. Bunun için Serialize butonumuzun Click olayının altına aşağıdaki kodu yazıyoruz.

private void btnSerialize_Click(object sender, System.EventArgs e)
{
        // Yeni bir Personel Sınıfı Yaratıyoruz Personel

        yeniPersonel= new Personel(); 

        // Personel Bilgilerini Personel nesnesine kaydediyoruz. 

        yeniPersonel.Ad=txtName.Text; 
        yeniPersonel.Departman=txtDept.Text; 
        yeniPersonel.Email=txtMail.Text; 
        yeniPersonel.Yas= int.Parse(txtAge.Text); 
        yeniPersonel.GirisTarihi=Convert.ToDateTime(dtpHireDate.Value.ToShortDateString()); 

        // Maaş Bilgilerini Personel sınıfı altında tutmak için 
        // yeni bir Para Sınıfı yaratıyor ve Bilgileri kaydediyoruz. 

        yeniPersonel.Maas=new Para(); 
        yeniPersonel.Maas.Tutar=Convert.ToDecimal(txtAmount.Text); 
        yeniPersonel.Maas.Birim=cmbCurrency.SelectedItem.ToString(); 

        // Serialize edilmiş olan nesneyi tutacak değişkene fonksiyonumuzun
        // geri dönüş değerini atıyoruz ve Messagebox kullanarak gösteriyoruz.

        strPersonelData = SerializeObject(yeniPersonel);
        MessageBox.Show(strPersonelData);
}


6. Şimdi de Serialization işlemini gerçekleştirecek olan metodumuzu yazıyoruz.

//Nesnemizi Serialize ederken kullanacağımız metot
private string SerializeObject(Personel PersObject)

        // Yeni bir XmlSerializer nesnesi yaratıyoruz ve Serialize 
        // edilecek sınıfımızın adını Constructor parametresi olarak gönderiyoruz. 

        XmlSerializer MySerializer = new XmlSerializer(typeof (Personel)); 

        // XML olarak Serialize edilmiş nesnemizi tutacak olan StringWriter yaratıyoruz. 
        TextWriter TW = new StringWriter(); 

        // Yarattığımız XmlSerializer’ın Serialize Metodunu kullanarak 
        // nesnemizi Serialize ediyoruz. 
        MySerializer.Serialize(TW, PersObject); 

        // Serialize edilmiş nesneyi geri döndürüyoruz. 
        return TW.ToString();
}

7. Bu işlemleri yaptıktan sonra uygulamamızı çalıştırdığımızda karşımıza çıkacak olan Dialog Kutusu aşağıdaki gibi olacaktır.


8 . Serialize edilmiş bir veriyi Deserialize etmek istersek ne yapmamız lazım sorusunun cevabını aşağıda yazılı kodları inceleyelerek göreceğiz ama öncelikle geri dönüş değerini göstermek için bir adet Form tasarlayalım. Bu formumuza istediğimiz adı verdikten sonra formumuza 1 adet TextBox ve 1 adet Button ekliyoruz. Formumuzun görüntüsü şekildeki gibi olacak.


9. Deserialize edilmiş veriyi gösterecek olan bu formumuzun sadece Kapat butonunun Click eventine aşağıdaki kodu yazıyoruz.

private void btnExit_Click(object sender, System.EventArgs e)
{
      this.Dispose();
}


10. İkinci formumuzun tasarımı bittikten sonra Deserialization işlemine geçelim. Bunu yapmak için Main Form sınıfımıza aşağıdaki kodları eklememiz yeterli olacaktır. Gerekli olan açıklamalar kodların üzerinde yazdığı için ekstra açıklama yapma gereği görmüyorum.

private void btnDeserialize_Click(object sender, System.EventArgs e)
{
      // Deserialization işlemini gerçekleştirmek için kullanacağımız 
      // metodu çağırıyor ve parametre olarak Deserialization işlemine tabi tutacağımız veriyi gönderiyoruz. 

      DeserializeXml(strPersonelData);
}

// Deserialization işlemi için kullanılacak olan metod
private void DeserializeXml(string XmlData)

      // Yeni bir Personel Nesnesi Yaratıyoruz Personel ReturnedEmployee; 
      // DeSerialize işleminde kullanılmak üzere yeni bir XmlSerializer 
      // nesnesi yaratıyor ve Serialize edilmiş verinin hangi nesne(Class) tipine çevirileceğini gösteriyoruz. 
      XmlSerializer MyDeserializer = new  XmlSerializer( typeof (Personel)); 

      // XML Verisini tutmak için bir StringReader yaratıyoruz.  
      StringReader SR = new  StringReader(XmlData); 
      XmlReader XR= new   XmlTextReader(SR); 

      // XML verisinin Deserialize edilip edilmeyeceğini kontrol ediyoruz.  
      if (MyDeserializer.CanDeserialize(XR)) 
      { 
            // Ve XML verisini Deserialize ediyoruz. 
            ReturnedEmployee = (Personel)MyDeserializer.Deserialize(XR); 
            ShowEmployeeData(ReturnedEmployee); 
      }
}

// Geri dönüş değerini düzgün bir hale getirmek için kullandığımız metod
private void ShowEmployeeData(Personel PersObject)

      // Deserializationişlemi yapılmış veriyi tutacak olan formu yaratıyoruz. 
      ReturnForm ReturnedData = new  ReturnForm(); 

      // Veriyi düzgün bir şekilde göstermek için StringiBuilder sınıfı ve 
      // bu sınıfın Append metodunu kullanıyoruz. 
      StringBuilder OutputString= new StringBuilder("Personel Bilgileri: \r\n"); 

      OutputString.Append("Adı: " + PersObject.Ad + "\r\n"); 
      OutputString.Append("Departmanı: " + PersObject.Departman + "\r\n"); 
      OutputString.Append("Email: " + PersObject.Email + "\r\n"); 
      OutputString.Append("Yaşı: " + PersObject.Yas.ToString() + "\r\n"); 
      OutputString.Append("İşe Başlangıç Tarihi: " + PersObject.GirisTarihi.ToString() + "\r\n"); 
      OutputString.Append("Maaşı: " + PersObject.Maas.Tutar + " " + PersObject.Maas.Birim + "\r\n"); 

      // StringBuilder sınıfımızın Geri dönüş verisini göstereceğimiz form üzerindeki Textbox’ın Text özelliğine atıyoruz ve Formumuzun ShowDialog metodunu kullanarak formumuzu gösteriyoruz. 

      ReturnedData.txtReturn.Text = OutputString.ToString(); 
      ReturnedData.ShowDialog();
}


Tüm bu kodları yazdıktan ve gerekli olan verileri girdikten sonra önce Serialize daha sonra da Deserialize butonuna bastığımızda karşılığında bize gelecek olan görüntü aşağıdakine benzer bir görüntü olacaktır.


Evet arkadaşlar "XML Serialization"’ın üzerine benim yazacaklarım şimdilik bu kadar. Bir sonraki makalemdeXml Serialization’ın kontrolü üzerinde duracağım. Soru ve önerileriniz için mail adresimden bana ulaşabilirsiniz. En kısa zamanda görüşmek üzere.

Makale:
.NET ile "XML Serialization" ve "Deserialization" İşlemleri XML ve Web Servisleri Gökhan Gürel
  • Yazılan Yorumlar
  • Yorum Yaz
EKİ
4
2009
Merhabalar Serialize ve deserialize işlemlerinde yapmaya çalıştığım bir şey var. Nasıl yapacağımı bulamadım. Yapmaya çalıştığım konu, her bir property serialize edilirken ve deserialize edilirken serialize değerini ve deserialize olurken propertynin serilestirilmis değerine göre property değerini kendim vermek istiyorum.Örneğin COM objesi olarak bir GIS connection nesnesi serilestirilirken ID değerini yazıp deserialize ederken de bu ID değerinden Com nesnesini tekrar oluşturmak istiyorum.ISerializable nesnesini kullandığım zaman tüm propertyler icin birer metot var.Ben sadece bir kac property icin bu metodu kullanmak istiyorum. Nasıl yapabilirim?Teşekkürler.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor