.Net Framework Serileştirme İşlemleri

Ekim 9, 2011

Merhaba , arkadaşlar .Net Framework ile serileştirme işlemlerini uygulamalarımız arasındaki haberleşme olarak düşünebiliriz.Kısaca genel bilgiler verdikten sonra geniş bir örnek yaparak konunun iyice anlaşılmasını sağlayalım. .Net içinde kullandığımız nesnelerimi serileştirerek nesnemizde bulunan bilgileri başka uygulamalarında kullanmasını sağlayabiliriz burada başka uygulamalar diye bahsettiğimiz sadece .Net tabanı uygulamalar olmamaktadır .Net de serileştirdiğimiz nesnelere diğer platformlarda çalışan uygulamalarda ulaşabilmektedir örnegin : .Net tabanlı bir uygulamadan yine .Net tabanlı bir uygulama için nesne serileştirilecek ise Binary serileştirme işlemi kullanılmalıdır bu daha hızlı olacak ve aynı zamanda daha küçük bir çıktı dosyası oluşturacaktır. .Net uygulamamızda örnegin java uygulaması için bir nesne serileştirilecek ise o zaman xml veya soap serileştirme işlemleri uygulanır. Buradad bahsettiğimiz gibi 3 tane serileştirme yapabiliriz.

 

 

1. Binary serileştirme

 

Binary serileştirme işleminde serileştirmek istediğimiz nesnemizin son durum bit olarak serileştirilir ve bir dosyaya kaydedilir. Remoting uygulamalarında en çok kullanılan yöntemdir.Diğer 2 serileştirme yöntemine göre daha hızlıdır ve çıktısı boyut olarak daha küçük olur.Nesnelerimizi binary olarak serileştirilebilmek için projemizin using kısmına  System.Runtime.Serialization.Formatters.Binary sınıfını eklememiz gerekmektedir.

 

 

2. Soap serileştirme 

 

Soap asıl olarak xml tabanlı bir iletişim sağlamaktadır.Genellikle dağıtık uygulamalarda ve web servislerinde haberleşme amaçlı  kullanılır.Soap olarak nesnelerimizi serileştirebilmemiz için projemizin referanslarına gerekli sınıfımızı eklememiz lazım.

 

 

3. Xml serileştirme

 

Xml ‘ in genel yapısı kolay olduğu için genellikle farklı uygulamalar arasındaki haberleşme için kullanılmaktadır.Xml serileştirmesi yaptığımız zaman çıktı ‘ nın anlaşılması çok kolay olacaktır ama xml serileştirme işlemi yaparken bazı kurallara dikkat etmemiz gerekmektedir.Serileştirmek istediğimiz alanlar public olarak işaretlenmiş olması lazım.Xml serileştirme yapabilmek için gerekli sınıfımızı using kısmına ekleyelim.

 

 

Serileştirmek istediğimiz sınıfları [Serializable] ile işaretlememiz gerekmektedir. Serileştirmek istediğimiz sınıfımızı IDeserializationCallback interface ‘ den türetilirse sınıfımız içindeki serileştirmek istemediğimiz alanları [NonSerialized] olarak işaretleriz ve IDeserializationCallback ‘ in constructor ‘ ında istediğimiz kodlamayı yaparız ve bu alanda yaptığımız işlemlerin sonucları serileştirilmiyecektir buradaki amaç serileştirilmesi gerekmeyen alanlar boş yere serileştirilmeyecegi için hem daha hızlı bir serileştirme işlemi yapmış oluruz hemde çıktı dosyasının boyutu bir o kadar küçülmüş olur.Yazdığınız uygulamada 2. versiyon yayınlaması yapacaksanız 1. versiyondaki [NonSerialized] alanları değiştirmeniz gerekiyorsa bu alanları  2. versiyonda [OptionalField] olarak işaretlemeniz gerekmektedir.Field ‘ larınızın ilk değerlerini contructor ‘ da vermelisiniz.1. versiyondaki field ‘ ler 2. versiyonda kaldırılmaz eğer  kaldırılsa hata ya sebep olucaktır aynı şekilde adlarınıda değiştirmemelisiniz. [OptionalField] olarak işaretlenmiş alanlar deserialiaze işlemi sırasında kontrol edilmezler.Deserialize işlemi serileştirme işleminin tam tersi olmaktadır.Serileştirdiğimiz nesneleri tekrar başka uygulamalarda kullanabilmek için deserialize işlemi yapmamız gerekmektedir. Örnek uygulamamıza geçebiliriz. 3 tane serileştirme işlemlerinide yapacagımız formumuzu ilk olarak tasarlayalım daha sonra butonların  arkalarına kodlarımızı yazalım.

 

 

Bu şekilde ara yüzümüzü tasarladıktan sonra using kısmına gerekli eklemeleri yapalım.

 

 

Yaptığımız serileştirme işlemleriniz tam tersi olan deserialize işleminide yapalımki konu her yönüyle anlaşılmış olsun. Serileştirmek için 2 tane sınıf yazalım . Alisveris ve Terarikci sınıfları.

 

 

 

İki sınıfımızıda serileştirebilmek için [Serializable]  olarak işaretliyoruz aynı zamanda Tedarikci sınıfımızı xml olarak serileştirecegimiz için dikkat ederseniz public olarak tanımlıyoruz.Şimdi butonlarımızın arkasına geçip serileştirme işlemlerinin nasıl yapıldığına bakalım.İlk olarak sıradan Binary serileştirmeden başlayalım.

 

 

Binary Serileştirme

 

 

Binary olarak serileştireceğimiz string ‘imizi değişkenimize aktarıyoruz daha sonra serileştirilecek olan dosyayı yazacağımız FileStream nesnemizi oluşturuyoruz ve dosyamızın ismini veriyoruz FileMode.Create diyerekte dosyanın ilk defa oluşturulacagını söylüyoruz.Binary serileştirme işlemi yapacağımız için BinaryFormatter sınıfından yararlanıyoruz bu sınıfın Serialize method’u yardımı ile yazıyı serileştirip uygulamanın kaynak kodlarının bulunduğu kök klasöre kaydediyoruz ve FileStream nesnemizide Close diyerek kapatıyoruz.

 

 

Serialize adında dosyamız kaynak kodlarımızın arasına kaydoldu.Aynı bu dosyayı deserialize işlemi ile okuyalım.

 

 

Binary Deserialize

 

 

FileStream nesnemiz yardımı ile okuyacağımız dosyayı açıyoruz Binary deserialize işlemi yapacağımız için yine BinaryFormatter nesnesinden yararlanacağız string tipinde bilgiyi alacağımız için string bir değişken oluşturuyoruz ve BinaryFormatter nesnesinin bize sundugu Deserialize method’u yardımı ile Serialize.Data dosyasının içindeki yazıyı alıp okunanData değişkenimize akterıyoruz daha sonra MessageBox ile alınan data ya bakalım.

 

 

 

AlisVeris Binary Serialization

 

 

AlisVeris sınıfımızın property ‘ lerine istediğimiz rakamları atadıktan sonra tekrar FileStream nesnesi , BinaryFormatter sınıfı ve Serialize method’u yardımı ile kendi sınıfımızı serileştirerek dosyamızı kaydediyoruz.

 

 

AlisVeris sınıfımızı serileştirdi ve kaydetti bu serileştirilen sınıfımızı txt dosyası gibi açmaya çalışırsak şöyle bir görüntü ile karşılaşırız.

 

 

Bu sekilde anlaşılmayan bir görüntü alırız ama aynı dosyayı şimdide deserialize işlemine tabi tutalım ve sonuca bakalım

 

 

AlisVeris Binary Deserialization

 

 

FileStream nesnesi yardımı ile okuyup BinaryFormatter sınıfının Deserialize method’u ile FileStream deki dosyayı alıp AlisVeris tipinde cast edip AlisVeris değişkenimize aktaryoruz daha sonra ulaştığımız bilgileri ekrana getiriyoruz.Şimdi sonucu görelim.

 

 

Deserialization işlemi ile sınıfımızın içindeki bilgilere ulaştık.

 

 

Soap Serialization

 

 

Soap serileşirme yapabilmek için SoapFormatter sınıfından yararlanıcaz bu işlemi yapabilmek için serileştirilmek için Hashtable oluşturalım daha sonra FileStream nesnesi yardımı ile İller.Soap dosyamızı olusturalım SoapFormatter sınıfının Serialize method’ u ile serileştirme işlemini gerçekleştirelim.

 

 

Soap Deserialization

 

 

Deserialization işlemini yapabilmek için serileştirip kaydettiğimiz dosyayı FileStream nesnesi yardımı ile okuyup SoapFormatter sınıfının Deserialize method’u ile deserielize işlemi uygulayıp Hashtable nesnesine cast ettikten sonra yeni oluşan Hashtable nesnemizin elemanlarına ulaşabiliriz.

 

 

Xml Serialization

 

 

Xml serileştirme işlemni yapabilmek için XmlSerializer sınıfını kullanıyoruz FileStream sınıfı yardımı ile kök klasör de .xml uzantılı dosyamızı oluşturuyoruz ve XmlSerializer sınıfının Serialize method’u yardımı ile serileştirme işlemini tamamlıyoruz burada dikkat etmemiz gereken yer XmlSerializer sınıfı bizden parametre olarak hangi nesneyi serileştireceksek onun tipini istemektedir onun için typeof  kullanılmıştır.

 

 

Xml Deserialization

 

 

Deserialization işlemi için FileStream nesnemiz ile oluşan dosyayı okuyoruz daha sonra XmlSerializer sınıfının Deserialize method’u ile verimizi değişkenimize aktarıyoruz.

 

 

Tedarikci Xml Serialization

 

 

Kendi yazdığımız Tedarikci sınıfını serileştirmk için ilk önce sınıfımızın property ‘ lerine değişkenlerimizi atıyoruz daha sonra xml serileştirme işlemini gerçekleştiriyoruz.Bu sefer XmlSerializer sınıfımıza Tedarikci tipini veriyoruz.

 

 

Tedarikci XmlDeserialization

 

 

Oluşan dosyadan XmlSerializer sınıfının Deserialize method’u ile deserialize işlemini gerçekleştiriyoruz daha sonra yeni oluşturduğumuz Tedarikci değişkeninden içindeki bilgilere ulaşıyoruz ve sonucu görelim.

 

 

Serileştirdiğimiz sınıfın içindeki bilgilere tekrar deserialization işlemi ile ulaştık.

 

 

ArrayList Xml Serialization

 

 

Örnek olarak bir tane ArrayList oluşturalım ve ArrayList nesnesini serileştirelim ve oluşan xml dosyayı browser’de açalım.

 

 

ArrayList nesnemizdeki bilgileri bu şekilde xml formatına dönüştürüp başka uygulamalara kullanmaları için gönderebiliriz.

 

 

List<> Binary Serialization

 

 

Tip güvenli List nesnemizi Binary olarak serileştirmek istersek bu şekilde kullanabiliriz.

 

 

Dizi Soap Serialization

 

İllerin tutulduğu dizimizi soap olarak serileştirelim.

 

Arkadaşlar dataset nesnesine serileştirme işlemi uygulamak için ilk olarak dataset nesnemizin içini veri tabanından çektiğimiz verilerle dolduralım bunun için sadece dataset nesnesini dolduraçak olan şu kodu yazalım.

 

 

 DataSet nesnemize diğer methodlardanda ulaşabilmek için global olarak tanımlıyoruz daha sonra DSet adında veri tabanımıza ulaşıyoruz bu tablodaki verileri sorgulayıp DataSet ‘imizi dolduruyoruz.Şimdi DataSet nesnemizi serileştirebiliriz.

 

 

DataSet Binary Serialization

 

 

İlk olarak DataSet nesnesini serileştireceğimiz için DataSetDoldur method ‘ unu çagırarak global DataSet nesnemize veri tabanındaki bilgilerimizi aktarıyoruz ve BinaryFormatter nesnesi yardımı ile DataSet nesnesini binary olarak serileştiriyoruz.

 

 

DataSet Xml Serialization

 

 

Aynı şekilde yine DataSet nesnemizi DataSetDoldur method’u ile dolduruyoruz daha sonra XmlSerializer nesnesinin Serialize method’u ile DataSet nesnemizi serileştiriyoruz.

 

 

DataSet Soap Serialization

 

 

Global DataSet nesnemizi SoapFormatter nesnesi yardımı ile serileştirip kök klasöre kaydediyoruz. Serileştirdiğimiz DataSet nesnemizin xml olandan küçük bir kesit.

 

 

 

Xml olarak serileştirdiğimiz zaman ilk olarak kolon adlarını ve tiplerini yazıyor daha sonra veri tabanında bulunan bilgileri tek tek alta doğru sıralıyor bu xml dosyasında toplam olarak 1000 kadar kayıt var bu dosyaya klasörün kaynak dosyaları arasından sizde ulaşabilirsiniz.

 

Bu konuyla ilgili son olarak şöyle bir senaryo düşünürseniz çok daha iyi anlayabilirsiniz örneğin : Sizin elinizde 10000 ürünün bilgileri tutan bir veri tabanı var ama bir arkadaşınızın bu veri tabanına ulaşmaya izni yok bu durumda ne yapabilirsiniz sizin yetkili olduğunuz veri tabanındaki 10000 ürünü sorgular bir DataSet nesnesine aktarır ve bu DataSet nesnesini xml olarak serileştirip arkadaşınıza verirdiniz arkadaşınızın tek yapması gereken bu xml formatındaki dosyadan veri leri yine bir DataSet nesnesine Deserialization işlemi ile alması olacaktır.Bu adımdan sonra arkadaşınızda sanki veri tabanı kendisindeymiş gibi DataSet nesnesi içinde gezerek tüm ürün bilgilerine ulaşabilir.İyi çalışmalar.

 

Kaynak Dosyaları Buradan İndirebilirsiniz

 

 

 

posted in C# by gokhan

Follow comments via the RSS Feed | Yorum yapın | Trackback URL

Leave Your Comment

*

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org