|
.NET ile "XML Serialization" ve "Deserialization" İşlemleri |
|
Gönderiliyor lütfen bekleyin... |
|
|
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.
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
|
|
|
-
-
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
|
|