XML yapısı metin tabanlı bir standarttır. HTML yapısına çok benzer biçimde oluşturulmuştur ve notepad ile bile okunabilir bir dokümandır. XML sayesinde artık dökümanlar(Microsoft Office dökümanları), resim, müzik, binary dosyalar ve veritabanı bilgileri saklanabilmektedir.
.Net Framework’te xml dostalarının okunması ve yazılması işlemlerini barındıran kütüphaneler System.Xml.Serialization ad uzayındadır.
XML Serileştirmenin Avantajları
XML yapısının en büyük avantajlarından biri platform bağımsızlığıdır. Yani herhangi bir işletim sisteminde veya herhangi bir uygulamada oluşturulmuş bir XML döküman .Net tarafından rahatça kullanılabilir. Diğer avantajları şu şekilde sıralayabiliriz.
- XML metin tabanlı bir satandart olduğundan tüm platformlar XML işlemlerini gerçekleştirebilen kütüphaneler bulunur. Bu sayede platform uyumluluğu vardır.
- XML yapıda serileştirilen nesneler, Notepad gibi metin editörleri tarafından görüntülenebilmektedir.
XML yapıdaki serileştirmelerde birçok kolaylık sağlanmış olsada aşağıdaki gibi bazı sınırlamalar da vardır.
- XML serileştirmede sadece public veriler serileştirilir. Private veriler serilştirilmez.
- Grafiksel objeler serileştirilemez, sadece nesneler serileştirilir.
Örnek:
FileStream stream = new FileStream(fileName, FileMode.OpenOrCreate); XmlSerializer serializer = new XmlSerializer(typeof(DateTime)); serializer.Serialize(stream, System.DateTime.Now);
Örnek:
FileStream stream = new FileStream(fileName, FileMode.Open); XmlSerializer serializer = new XmlSerializer(typeof(DateTime)); DateTime date = (DateTime)serializer.Deserialize(stream);
XML ile serileştirilebilen sınıflar oluşturmak
XML ile serileştirilecek bir sınıf oluşturulurken şu kurallara dikkat etmek gerekmektedir.
- Sınıf erişimi public olarak belirlenmelidir.
- Serileştirilmek istenen tüm sınıf üyeleri public olmalıdır.
- Parametresiz kurucu metodlar(constructors) oluşturulmalıdır.
Standart serileştirmedeki gibi sınıfın [Serializable] ile imzalanmasına gerek yoktur.
[XmlRoot("CartItems")] public class CartItems { [XmlAttribute] public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } public int Quantity { get; set; } [XmlIgnore] public decimal Total { get { return Price * Quantity; } } }
Yukardaki sınıfa ait bir nesnenin XML olarak serileştirildiğinde oluşacak XML içeriği aşağıdaki gibidir.
<?xml version="1.0"?> <CartItems Id="2" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Name>Book</Name> <Price>5.96</Price> <Quantity>2</Quantity> </CartItems>
Dataset nesnelerini XML olarak serileştirme
Public erişimli bir sınıfa ait nesnelerinin serileştirildiği gibi DataSet nesnelerini de serilştirmek mümkündür.
DataSet dataSet = new DataSet("MyDataset"); DataTable dataTable = new DataTable("Users"); DataColumn dataColumn = new DataColumn("FirstName"); DataColumn dataColumn2 = new DataColumn("LastName"); dataSet.Tables.Add(dataTable); dataTable.Columns.Add(dataColumn); dataTable.Columns.Add(dataColumn2); for (int i = 0; i < 10; i++) { DataRow row = dataTable.NewRow(); row[dataColumn] = "User" + i; row[dataColumn2] = "Last Name" + i * 2; dataTable.Rows.Add(row); } FileStream stream = new FileStream("Dataset.xml", FileMode.OpenOrCreate); XmlSerializer seri = new XmlSerializer(typeof(DataSet)); seri.Serialize(stream, dataSet); stream.Close();
Örnekte görüldüğü gibi sadece dataset nesnesi oluşturularak XmlSerializer yardımıyla serileştirme işlemi kolayca yapılabilmektedir.
Umarım faydalı bir yazı olmuştur. Herkese iyi çalışmalar.