Serilestirme (Serialization) - PowerPoint PPT Presentation

1 / 42
About This Presentation
Title:

Serilestirme (Serialization)

Description:

Serile tirme (Serialization) System.Xml.Serialization namespace i nesneleri XML dosyalar na (veya dosylar ndan) yaz p okuyabilmek i in metotlar bar nd r r. – PowerPoint PPT presentation

Number of Views:71
Avg rating:3.0/5.0
Slides: 43
Provided by: Bora150
Category:

less

Transcript and Presenter's Notes

Title: Serilestirme (Serialization)


1
Serilestirme(Serialization)
2
  • .NET uygulamasinda bir nesne yarattigimizda,
    verinin bellekte nasil tutuldugunu gelistirici
    olarak düsünmeyiz. Bu isle, .NET framework bizim
    adimiza ilgilenir.

3
  • Eger bir nesnenin içerigini bir dosyaya
    yazdirmak istedigimizde nesnenin nasil temsil
    edildigi hakkinda düsünmemiz gerekecektir. Çünkü
    bu nesneyi farkli bir forma dönüstürmemiz
    gerekir. Bu dönüsüme Serilestirme(Serialization)
    denilmektedir.

4
Serilestirme(Serialization) Nedir?
  • Serialization, System.Runtime.Serialization
    isim alani tarafindan implement edilmektedir.
  • Bu islem, nesnelerin saklanip veya transfer
    edilip tekrar olusturulabilmesi için
    serilestirilmesi ve geri dönüsüm
    (deserialization) islemlerini kapsar.

5
  • Serilestirme, bir nesnenin saklanmasi veya
    transfer edilebilmesi için dogrusal byte
    dizilerine dönüstürülmesidir.
  • Geri serilestirme (DeSerialization) ise
    serilestirilmis olan byte dizisinin nesneye
    dönüstürülmesidir.

6
  • using System using System.IO
  • using System.Runtime.Serialization.Formatters.Bin
    ary
  • namespace ConsoleApplication3
  • class Program
  • static void Main(string args)
  • string data "Merhaba Bilgisayar
    Mühendisligi"
  • FileStream fs new
    FileStream("Serialized.Data", FileMode.Create)
  • BinaryFormatter bf new
    BinaryFormatter()
  • bf.Serialize(fs, data)
  • fs.Close()

7
  • Sadece tek bir stringin dosyada tutulmasina
    ihtiyacimiz varsa serilestirmeyi kullanmak
    zorunda degiliz. Bu stringi bir text dosyasina da
    dogrudan saklamak mümkündür.
  • Serilestirmenin önemi, özellikle daha karmasik
    bilgilerin(Zaman,tarih vs.) saklanmasinda ortaya
    çikmaktadir.

8
  • using System using System.IO
  • using System.Runtime.Serialization.Formatters.Bin
    ary
  • namespace ConsoleApplication3
  • class Program
  • static void Main(string args)
  • FileStream fs new
    FileStream("SerializedString.Date",
    FileMode.Create)
  • BinaryFormatter bf new
    BinaryFormatter()
  • bf.Serialize(fs, System.DateTime.Now)
  • fs.Close()

9
Deserialization
  • Deserialization islemi, serilestirilmis nesnenin
    bilgilerini kullanarak yeniden nesnenin
    olusturulmasini saglar.

10
  • using System using System.IO
  • using System.Runtime.Serialization.Formatters.Bin
    ary
  • namespace ConsoleApplication3
  • class Program
  • static void Main(string args)
  • string data ""
  • FileStream fs new FileStream("SerializedString
    .Data", FileMode.Open)
  • BinaryFormatter bf new BinaryFormatter()
  • data (string)bf.Deserialize(fs) Console.W
    riteLine(data)
  • fs.Close()

11
  • using System using System.IO
  • using System.Runtime.Serialization.Formatters.Bin
    ary
  • namespace ConsoleApplication3
  • class Program
  • static void Main(string args)
  • DateTime previousTime new DateTime()
  • FileStream fs new
    FileStream("SerializedDate.Data",
    FileMode.Open)
  • BinaryFormatter bf new
    BinaryFormatter()
  • previousTime (DateTime)bf.Deserializ
    e(fs)
  • Console.WriteLine("Day"previousTime.
    TimeOfDay.ToString())
  • fs.Close()

12
Siniflar Nasil Serilestirilir?
  • Bu özellik sayesinde, baska bir gelistirici bu
    siniflarin örneklerini (instances) kolaylikla
    saklayabilir ve transfer edebilir.
  • Siniflar serilestirildiginde, siniflarin tüm
    üyeleri (private olanlar dahil olmak üzere)
    serilesirler.

13
  • Siniflarin bazi üyelerinin serilestirme
    sirasinda saklanmasina gerek yoktur. (Bazi üyeler
    hesaplanabilen/geçici degerler) tasiyabilirler.

14
  • Serializable
  • class ShoppingCartItem
  • public int productId
  • public decimal price
  • public int quantity
  • public decimal total
  • public ShoppingCartItem(int
    _productID,decimal _price, int _quantity)
  • productId_productID
  • price_price
  • quantity _quantity
  • total price quantity

15
  • Serializable
  • class ShoppingCartItem
  • public int productId
  • public decimal price
  • public int quantity
  • NonSerialized public decimal total
  • public ShoppingCartItem(int
    _productID,decimal _price, int _quantity)
  • productId_productID
  • price_price
  • quantity _quantity
  • total price quantity

16
  • Artik, nesne serilestiginde, total üyesi gözardi
    edilip bu isleme dahil edilmeyecektir.
  • Fakat, total degiskeninin degeri, nesne
    deserialize edilip kullanilmadan önce
    hesaplanmaktadir.

17
  • Serilestirilmeyen üyelerin otomatik olarak
    baslangiç degerlerinin verilmesi için,
    IDeserializationCallback arayüzü kullanilmasi ve
    bunun implement edilmesi gerekir.
  • Sinif her defasinda deserialize edildiginde,
    çalisma zamaninda IDeserializationCallBack.OnDeser
    ialization metodu, deserialization bittikten
    sonra çagrilir.

18
  • Serializable
  • class ShoppingCartItem
  • public int productId
  • public decimal price
  • public int quantity
  • NonSerialized public decimal total
  • public ShoppingCartItem(int
    _productID,decimal _price, int _quantity)
  • productId_productID
  • price_price
  • quantity _quantity
  • total price quantity
  • ./..

19
  • Serializable
  • class ShoppingCartItem
  • ... ...
  • ... ...
  • public void OnDeserialization(object sender)
  • //Deserialization isleminden sonra,
    total'in degerini hesapla
  • total price quantity

20
Versiyon Uyumlulugu
  • Programin daha önceki sürümü tarafindan
    serilestirilmis olan bir nesneyi daha sonraki bir
    sürümünde deserialize etmeye çalisildiginda
    uyumluluk sorunlari yasamak mümkündür.

21
  • Örnegin, kendi sinifimiza yeni bir üye
    ekledigimizde ve ardindan bu ögeye sahip olmayan
    bir ögeyi deserialize etmeye çalistigimizda,
    çalisma zamaninda exception olusur.

22
  • Bu sorunu çözmek için 2 seçenek vardir
  • Özel serilestirmeyi kullanmak. (Custom
    Serialization)
  • OptionalField niteligini, yeni eklenen üyelerde
    kullanmak.

23
  • OptionalField niteligi, serilestirme islemine
    etki etmez. Sadece, deserialization sirasinda,
    eger üye önceden serilestirilmemisse, bu üyenin
    degerini null olarak atar ve böylece exception
    olusturmaz.

24
  • Serializable
  • class ShoppingCartItem
  • public int productId
  • public decimal price
  • public int quantity
  • NonSerialized public decimal total
  • OptionalField public bool texable
  • public ShoppingCartItem(int
    _productID,decimal _price, int _quantity)
  • productId_productID
  • price_price
  • quantity _quantity
  • total price quantity

25
  • Versiyon uyumlulugunu saglamak için
  • Serilestirilmis bir alani(field) siniftan
    çikartilmamalidir.
  • NonSerialized niteligini, daha önceki
    versiyonda NonSerialized olarak belirtilmemis
    bir alana uygulayin.
  • Serilestirilmis bir alanin türünü ve ismini
    degistirmeyin.

26
  • Versiyon uyumlulugunu saglamak için
  • Serilestirilen sinifa yeni bir alan eklenecekse
    OptionalField niteligi uygulanmalidir.
  • Bütün seçimlik alanlar için, anlamli baslangiç
    degerleri olusturulmalidir.

27
Serilestirme Biçimi(Serialization Format)
  • .NET Framework System.Runtime.Serialization
    namespaceinde, serilestirilecek veriyi
    biçimlendirmek için 2 sinif içerir
  • BinaryFormatter
  • SoapFormatter
  • Bu siniflardan ikisi de IRemotingFormatter
    arayüzünü implement eder.

28
BinaryFormatter
  • System.Runtime.Serialization.Formatters.Binary
    namespaceinde bulunur. Bu sinif kullanilarak
    serilestirilen nesneler, sadece .NET Framework
    tabanli uygulamalar tarafindan okunabilirler.

29
SoapFormatter
  • System.Runtime.Serialization.Formatters.Soap
    namespaceinde bulunur.
  • Bu biçimlendirici XML tabanli olup, nesnelerin
    ag üzerinde serilestirilerek gönderilmesinde ve
    .NET Framework tabanli olmayan uygulamalar
    tarafindan da okunabilmesine olanak tanir.

30
  • SoapFormatteri kullanabilmek için
    System.Runtime.Serialization.Formatters.Soap.dlle
    referans vermek gerekir.
  • BinaryFormatterin aksine varsayili olarak
    referans edilmis bir sekilde gelmez.
  • Her iki biçimlendiricinin yazim sekli birbirine
    benzese de serilestirilen verinin sekli
    degisiktir.

31
  • SoapFormatter, verimli olmamasina ragmen, farkli
    platformlar arasinda verilerin transfer
    edilebilmesini saglar.

32
XML Serilestirme(XML Serialization)
33
  • XML, standardize edilmis, text tabanli belge
    formatidir. Uygulamalari okunabilir bir sekilde
    depolamak amaciyla kullanilir.
  • Her tür verinin saklanmasi için kullanilabilir
    (Dölüman, resim, müzik, binary dosya, veritabani
    bilgiler vb.)

34
  • System.Xml.Serialization namespacei nesneleri
    XML dosyalarina (veya dosylarindan) yazip
    okuyabilmek için metotlar barindirir.
  • Bu sekilde serilestirilmis olan nesneler farkli
    bilgisayarlar arasinda Web Servisleri
    kullanilarak transfer edilebilirler. Böyle bir
    durumda uzaktaki bilgisayarin .NET Frameworkü
    kullanmasina gerek yoktur.

35
Avantajlari
  • XML serilestirmenin standart serilestirmeye göre
    bazi üstünlükleri vardir
  • Daha Fazla Birlikte Kullanilabilirlik
  • Daha Fazla Yönetici Dostu
  • Ileriye Yönelik Uyumluluk

36
Dezavantajlari
  • Sadece public datalari serilestirebilir.
  • Nesne graflarini serilestirmek mümkün degildir.
    Sadece nesneler üzerinde uygulanabilir.

37
  • using System using System.IO
  • using System.Xml.Serialization
  • namespace ConsoleApplication3
  • class Program
  • static void Main(string args)
  • FileStream fs new FileStream("SerializedDate.X
    ML", FileMode.Create)
  • XmlSerializer xs new XmlSerializer(typeof(D
    ateTime))
  • xs.Serialize(fs, DateTime.Now)
  • fs.Close()

38
  • using System using System.IO
  • using System.Xml.Serialization
  • namespace ConsoleApplication3
  • class Program
  • static void Main(string args)
  • FileStream fs new FileStream("SerializedDate.X
    ML", FileMode.Open)
  • XmlSerializer xs new XmlSerializer(typeof(DateT
    ime))
  • DateTime previousTime (DateTime)xs.Deserial
    ize(fs)
  • fs.Close() Console.WriteLine("Time
    "previousTime.TimeOfDay.ToString())

39
Siniflar XML Serializer ile Nasil Serilestirilir?
  • XML serilestirme kullanarak serilestirilecek bir
    sinif yaratmak için
  • Sinif, public olarak belirtilmelidir.
  • Serilestirilecek olan tüm üyeler public olarak
    belirtilmelidir.
  • Parametre almayan bir yapici olusturulmalidir.

40
  • XML serilestirmesi için gerekli olan
    yeterlilikleri saglayan bir sinif, XML
    niteliklerinin hiçbirine sahip degildir. XML
    elemanlarinin isimleri sinif ve üye isimlerine
    baglidir. Her üye ayri bir XML elemani olacak
    sekilde serilestirilir.

41
(No Transcript)
42
Kaynak
Chapter 5 Pages 169-192
Write a Comment
User Comments (0)
About PowerShow.com