Serialization kavramı bilindiği üzere nesnenin herhangi bir
t zamanında belirtilen “formatter” kullanılarak bellek üzerinde depolanması ve
yine herhangi bir t zamanında bellek üzerinde depolandığı yerden “serialize”
edildiği zaman sürecindeki değerleriyle tekrardan oluşturulma işlemidir.
Olaya bu açıdan bakıldığında serialization işleminin .Net
Framework üzerinde yüzlerce parametresi bulunmaktadır. XML, SOAP ve Binary
Serialization olarak 3 farklı format üzerinde incelenebilecek olan bu kavram
her birinde farklı avantajlar & dezavantajlar getirmektedir.
Temel hatlarıyla avantajları ve dezavantajlarına baktığımıza
göze çarpan en büyük fark XML Serialization’ ın Shallow (Sığ) Serialization,
SOAP ve Binary Serialization’ ın ise Deep (Derin) Serialization yapabiliyor
olmasıdır. Shallow Serialization’ da Public Member’ lar serialize edilirken ,
Private Member’ lar serialize edilmemektedir. Deep Serialization’ da ise tüm
Member’ lar serialize edilebilmektedir.
Bütün bunların yanında .Net Compact Framework’ e baktığımızda
.Net Framework ile kıyaslandığında sadece XML Serialization’ ın
gerçekleştirilebildiğini görmekteyiz. Bu makalemizde .Net Compact Framework 2.0
platformu üzerinde Mobil Cihazlarda XML Serialization kavramı üzerine basit bir
örnek geliştireceğiz.
Konun daha rahat anlaşılabilmesi açısından bu noktada örnek
üzerinden gitmek daha faydalı olacaktır.
Standart bir C# Mobile 5.0 Smart Device Application projesi
açarak işe başlıyoruz.

Amacımız XmlSerialization kullanarak datalarını mobil cihaz
belleği üzerinde depolayan bir telefon defteri geliştirmek olacaktır.
Şekildeki formu tasarlayarak uygulamamıza devam ediyoruz :

Form üzerine yeni telefon bilgisi ekleneceği noktada
kullanılacak olan iki adet metin kutusu, 3 adet buton ve iki adet kolon
barındıran bir ListView kontrolü ekliyoruz.
Senaryoya göre kullanıcı uygulamayı çalıştırdığında Yükle
button’ una basacak ; “eğer var ise” XML Dökümanı üzerinden ArrayList
Deserialize edilecek ve içerisindeki tüm TelefonBilgisi objeleri ListView
kontrolü içerisine eklenecektir.
İlk olarak kod tarafında şekildeki sınıfı oluşturuyoruz.

Şekilde bakıldığı zaman ilginç gelebilme ihtimali olabilecek
tek metot BilgilerimdenListeElemaniGetir metodu olabilir. Metodun amacı Telefon
bilgilerini içerisinde barındıran ve iki SubListViewItem içeren bir
ListViewItem döndürmek olacaktır. Dönen objeyi ListView.Items.Add metoduna
direk gönderdiğimiz noktada işimiz bitmektedir.
Şekildeki kod bloğu üzerinden devam ediyoruz :

Şekilde görülebileceği üzere Form’ umuz yüklendiği noktada global’
de tanımlanan xSER isimli XmlSerializer referansını yeni bir instance’ a
eşitliyoruz.
Bu noktada dikkat edilmesi gereken nokta XmlSerializer
nesnesinin constructer’ ında nesnenin serialize edebileceği tipleri
belirlememiz gerekmektedir. Dikkat edilecek olursa ilk parametrede ArrayList
tipi gonderilir iken ikinci parametrede TelefonBilgi isimli tip gönderilmiştir.
Tipler doğru gönderilmediği taktirde nesnemiz ne serialize ne de deserialize
işlemi gerçekleştirebilecektir.
Yükle button’ una basıldığında ise Mobil Cihazımızın kök
klasörü içerisindeki TelefonData.xml isimli döküman aranamakta ; var ise
açılmakta yok ise oluşturulmaktadır. Bir sonraki adımda açılan xml dökümanının
boyutu incelenmekte ; 0 byte’ tan büyük ise XmlSerializer nesnemiz kullanılarak
ArrayList deserialize edilmekte ; değil ise içi boş bir ArrayList objesi oluşturulmaktadır.
Son olarak Kaydetme ve Ekleme işlemlerini gerçekleştiren kod
satırlarını belirliyoruz :

Yeni bir telefon eklendiğinde TelefonBilgi sınıfının yeni
bir kopyası oluşturulmakta ve gerekli değerler gönderilmektedir. Bir sonraki
adımda bu obje ArrayList içerisine eklenmekte ve eş zamanlı olarak ListView
içerisine eklenmektedir.
Kaydet button’ una tıklandığında ise çalışan tek satır
global’ de tanımlanmış olan XmlSerializer nesnesinin Serialize metodudur.
Hiç vakit kaybetmeden uygulamayı çalıştırıyoruz.

Uygulama ana ekran’ ı üzerinde ilk olarak Yükle button’ una
basarak ArrayList’ in oluşmasını sağlıyoruz. İlk noktada TelefonData.xml
dökümanı olmadığı için herhangi bir telefon datası gelmemektedir.
Bir sonraki adımda birkaç telefon datası ekliyoruz :

Dataları ekledikten sonra Kaydet Button’ una tıklıyoruz :

Ve hemen gidip mobil cihazımızın kök klasöründeki
TelefonData isimli XML Dökümanımıza bakıyoruz :

Dosya başarıyla oluşturulmuş ve 510Byte’ lık bir boyuta
sahip. Dosyayı hemen mobil cihaz emülatörümüz üzerinde açıyoruz :

Ve sonuç ! XmlSerializer kullanılarak ArrayList içerisindeki
tüm objelerimiz ArrayList halinde xml dökümanına serialize edilmiş durumdadır.
Hepsi bu kadar.
Bu makalemizinde sonuna geldik. Başka bir makalede daha
görüşmek üzere.