Generic Yapılarda Serialization ile Kaydetme ve Yükleme

Selamlar,

Bugün farklı sınıflar için sürekli aynı kodları tekrar etmek yerine, generic bir yapıda belli bir nesnenin, nasıl serialize edip kaydedilebileceğini ve deserialize edilip yüklenebileceğini inceleyeceğiz.

Bugün yazacağımız kodlar, benim de gündelik hayatta bolca kullandığım kodların küçük bir parçasıdır.

Şimdi gelin isterseniz üzerinde çalışacağımız sınıfımızı oluşturalım. Aşağıda görüldüğü gibi bu bir başvuru class’ıdır.

İlk sistemde ilgili başvuruyu “Xml” olarak kaydetmek için aşağıdaki gibi sınıf tipi olan “Application” tanımlanıp bu sınıfa göre “XmlSerialization” işlemi yapılmaktadır.

Yine aynı şekilde ilk sisteme göre yukarıda belirtilen yol ile kaydedilen “Application” sınıfı, “Deserialize” edilerek, Xml formatından Class‘a çevrilmiş ve ilgili sınıfın propertyleri aşağıdaki gibi doldurulmuştur.

xmlPicture

Şimdi gelin ilgili Application sınıfını, Console bir uygulamanın “Main()” methodunda aşağıdaki gibi kaydedelim. Kaydedilme işleminden sonra “Application.xml“‘in örnek Xml çıktısı yukarıdaki gibidir.

console

Yazılan “Application.xml” dosyasının basit şekilde “Deserialize” edilip, Application class’ına çevrilerek okunması aşağıdaki gibidir. Örnek ekran çıktısı yukarıdaki gibidir.

app2

Generic Save: Aşağıdaki örnekde sabit bir type belirtilmeden, generic tipde bir nesnenin nasıl “Serialize” edilip kaydedildiği gösterilmektedir. Kaydedilen örnek “.xml” uzantılı dosya yukarıdaki gibidir. Burada amaç farklı tipte nesneler içini kod tekrarı yapmamak ve tüm object türleri için aynı kodu kullanmaktır.

Generic Load: Aşağıdaki örnekte generic tipde bir nesne “Deserialize” edilip okunmaktadır. Kısaca kod tekrarından kurtulmak için, tipden bağımsız bir yükleme methodu yazılmıştır.

LoadGeneric

İlgili “Load()” methodunun kullanım şekli aşağıdaki gibidir. Örnek ekran çıktısı yukarıdaki gibidir.

İsterseniz şimdi gelin bu Generic Save kodları daha şık bir hale getirelim: Aşağıda görüldüğü gibi ilgili “Save()” methodu artık “<T>” şeklinde bir tip beklememekte ve gelen nesenin tipi “GetType()” methodu ile alınmaktadır. Böylece daha kısa ve daha anlaşılır bir kod elde edilmiş olunup gereksiz yere “Save()” methodu çağrılırken tip tanımlaması yapılmamıştır.

Untitled

Aşağıda yeni “SaveBetter()” methodunun kullanım şekli ve yukarıda ekran çıktısı gözükmektedir. Görüldüğü gibi Application sınıfına ait herhangi bir tanımlama yapılmamıştır.

Böylece Generic yapılarda Serializa ve Desrializa işlemler yaparak, belirlenen bir nesneyi kaydettik ve tekrar yükleyip özelliklerini ekrana bastık. Daha sonra ilgili kodları, tipden bağımsız tüm nesler için kullanılabilecek temiz sade bir hale getirdik.

Geldik bir makalenin daha sonuna. Yeni bir makalede görüşmek üzere hoşçakalın.

Source Code : https://github.com/borakasmer/GenericSerializer

Kaynak : https://www.codeproject.com/Articles/1105754/Generic-Csharp-NET-Object-Save-Load

Herkes Görsün:

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.