Merhabalar, C# XML Serialization ve Deserialization İşlemleri dersim ile C# Eğim setime devam ediyorum. Bu dersimizde internet üzerinden veri gönderme işlemlerinde ve son zamanlarda iyice yaygınlaşan E-Fatura, E-İrsalye, E-Defter gibi servislerin kullandığı dosyaların XML olarak, temelde nasıl oluşturulduğunu göreceğiz. Verileri bir object halinden, aktarılabilir veri haline, aktarılabilir veri halinden bir object ‘e nasıl dönüştüreceğimize ve XML Serialization Nedir? ile XML Deserialization Nedir? sorularının cevaplarına bakacağız.
C# XML Serialization ve Deserialization İşlemleri
Öncelikle bu terimlerin ne anlama geldiklerine bakalım.
XML Serialization Nedir?
Serialization’un tam bir Türkçe karşılığı yoktur. Türkçe’ye Serileştirme, Seri Hale Getirme gibi bir anlam ile çevirebiliriz. Serialization, bir nesnenin (object) o anki durumu koruma amacı ile bir kopyasını hazırlayarak, o kopyaya kolayca ulaşılabilecek ya da transfer edilebilecek bir forma (XML) dönüştürme işlemidir. Serialization işlemi toplamda XML, SOAP veya Binary olmak üzere 3 farklı şekilde yapılabilmektedir.
XML Deserialization Nedir?
Deserialization ‘un tam bir Türkçe karşılığı yoktur. Türkçe’ye Ters Serileştirme olarak çevirebiliriz. Deserialization, Serialization’un tersi işlemidir. XML formatına dönüştürdüğümüz bir nesneyi, tekrar nesne haline getirme işlemidir.
Serialization işlemi uygulanmış bir nesnenin ömrü programın ömründen bağımsızlaşır. Veriler farklı bir noktaya ulaştığından daha doğrusu yazılımdan dışarı çıktığından dolayı biz yazılımı sonlandırsak bile başka birisi ağ üzerinden bilgilerin son haline ulaşabilir.
Serialization işleminin en büyük amacı ve faydası, platform bağımsız olarak verileri aktarabilmemizdir. MAC sistemde çalışan bir uygulamasının yaptığı Serialization işlemi sonucunda ortaya çıkan veriyi Windows yada Linux gibi farklı sistemlerde çalışan uygulamalar Deserialization işlemi ile o bilgilere ulaşabilir ve kullanabilir. Buradaki dersimde XML hakkında geni bir bilgi vermiştim.
Serialization ve Deserialization işlemlerinde kullandığımız 3 metodumuz vardır.
Serialize() , Deserialize() ve CanDeserialize() .
CanDeserialize() serileştirilmiş objenin, Deserialize edilip edilemeyeceğine karar vermek için kullanırız.
3 Türden Hangisini Kullanmalıyım?
XML Serializataion kullanımında bazı kısıtlamalar vardır.
- Sadece Public olan nesneler serileştirilebilir.
- Metod ve Private olarak tanımlanan elemanlar serileştirilemez.
- Sadece verinin kendisi ve sınıfın yapısı serileştirilebilir. Verilerin tipleri serileştirilemez.
Eğer yapmak istediğiniz şeyler bu kısıtlamalara takılıyorsa Soap yada Binary’den uygun olanını seçmelisiniz.
Gerekli bilgileri verdikten sonra Github projeme de eklediğim bu derste kullanacağımız örneğe geçelim.
C# XML Serialization ve Deserialization İşlemleri
Bir personel bilgilerini önce Serialization işlemine daha sonra da Deserialization işlemine tabi tutacağız. Bunun için basit bir form tasarımı yaptım. Aşağıda görebilirsiniz.
Serialization butonuna tıkladığımızda sol tarafta yazılı olan bilgileri Serialization işlemine tabi tutup sağ taraftaki textbox’a yazacağız ve bilgileri sileceğiz. Deserialization butonuna tıkladığımızda Serialization işleminden çıkan sonucu Deserialization işlemine tabi tutarak tekrar sol taraftaki alanlara dolduracağız.
Bu işlemler için gerekli NameSpace’leri projemize ekleyelim.
using System.Xml; using System.Xml.Serialization; using System.IO;
İşlemlere geçmeden önce bir Personel class’ı (Object) tanımlamamız gerekiyor.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace mustafabukulmez_com_dersler._032_Serialization_Deserialization { public class Personel { public string Adi { get; set; } public string Soyadi { get; set; } public string Telefon { get; set; } public string Mail_Adres { get; set; } } }
Personel Class’ımızı tanımladıktan sonra işlemlerimize geçelim.
Serialization İşlemi
Serialization butonun click eventine gelelim ve kodları vereyim.
string strPersonelData; private void btn_Serialization_Click(object sender, EventArgs e) { Personel yeni_Personel = new Personel() { Adi = txt_adi.Text, Soyadi = txt_soyadi.Text, Telefon = txt_tel.Text, Mail_Adres = txt_mail.Text }; strPersonelData = SerializeObject(yeni_Personel); txt_xml_cikti.Text = strPersonelData; }
Burada bilgilerimizi serileştirecek bir metodumuz var. O metodumuzu ada vereyim.
private string SerializeObject(Personel PersObject) { XmlSerializer MySerializer = new XmlSerializer(typeof(Personel)); TextWriter TW = new StringWriter(); MySerializer.Serialize(TW, PersObject); Temizle(); return TW.ToString(); } void Temizle() { txt_adi.Text = ""; txt_soyadi.Text = ""; txt_tel.Text = ""; txt_mail.Text = ""; }
Kodları açıklayayım;
- Personel nesnemizi Serileştirildikten sonra çıkan sonucu strPersonelData değişkenine atayacağız.
- Bir Personel nesnesi tanımlıyoruz ve verileri giriyoruz.
- SerializeObject metodumuza Personel nesnemizi gönderiyoruz.
- Çıkan sonucu cikti textbox’una yazıyoruz.
- XMLSerializer sınıfı tanımlıyoruz ve Personel nesnemizin tipini alıyoruz. Serileştirilecek nesnesin formatını alıyor.
- TextWriter sınıfı tanımlıyoruz. Bu sınıf ile serileştireceğimiz nesneyi xml formatında yazmak için kullanacağız.
- Tanımladımız XMLSerializer sınıfının Serialize metodununa ve TextWriter sınıfını ve dışarıdan aldığımız Personel nesnesini gönderiyoruz.
- Temizle metodumuz ile sol taraftaki textboxları temizliyoruz.
- TextWriter’a yazdığımız XML formatındaki personel bilgilerini geri dönüş olarak veriyoruz.
Yukarıdaki ekran görüntüsünde gördüğünüz gibi sol taraftan aldığımız bilgilerle ürettiğimiz Personel nesnesinin serileşirilmiş hali sağ taraftaki textbox’ta görülmektedir. Şimdi bu işlemi tersten yani Deserialization işlemine bakalım.
Deserialization İşlemi
Deserialization butonun click eventin gelelim ve kodlarımızı yazalım.
private void btn_Deserialization_Click(object sender, EventArgs e) { DeserializeXml(strPersonelData); }
Burada yine bir metod kullandık.
private void DeserializeXml(string XmlData) { XmlSerializer MyDeserializer = new XmlSerializer(typeof(Personel)); StringReader SR = new StringReader(XmlData); XmlReader XR = new XmlTextReader(SR); if (MyDeserializer.CanDeserialize(XR)) { Personel GelenBilgiler = (Personel)MyDeserializer.Deserialize(XR); ShowEmployeeData(GelenBilgiler); txt_xml_cikti.Text = ""; } } private void PersonelGoster(Personel PersonelObject) { txt_adi.Text = PersonelObject.Adi; txt_soyadi.Text = PersonelObject.Soyadi; txt_tel.Text = PersonelObject.Telefon; txt_mail.Text = PersonelObject.Mail_Adres; }
Serileştirme işleminden farklı olarak burada StringReader kullandık.
- String Reader ile okuduğumuz XML formatını XMLReader sınıfına atamasını yaptık.
- CanDeserialize() metodu ile formatı kontrol ettik.
- Okunan XML formatını Deserialize ederek tekrar Personel nesnesine dönüştürdük.
- Personel nesnesi olarak parametre alan PersonelGoster() metodumuz ile de aldığımız bilgileri textboxlara yazdık.
C# XML Serialization ve Deserialization İşlemleri Kurmak dersimiz de bu kadardı arkadaşlar. Hem ekran görüntüsü olarak hemde video olarak nasıl göründüğünü ve çalıştığını sizlerle paylaştım.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz… Bu dersim de 32 numaralı ders olarak Github projemde yerini almıştır.
Sağlıcakla ve takipte kalın.