Bu yazıda serileştirme işleminde kullanılan niteliklerden bahsedeceğim. Bir önceki bölümde sizlere .NET Framework’te XMLSerialization işleminin nasıl yapıldığından bahsetmiştim. İlk bölümü okuyan arkadaşların hatırlayacağı gibi XMLSerialization işleminde nesnemiz(object) içinde public tanımlı özellik (property) ve alanları (field) serileştirebiliyorduk(serialize). Ama serileştirme işleminin sonucunda aşağıda yazdıklarım serileştirilmiş nesnenin kullanılacağı başka bir uygulamada problem yaratabilmekte veya serileştirilip XML haline getirilmiş olan nesnemizin okunabilirliğinin azalmasına neden olabilmektedir.

  • Tüm public özellik(property) ve alanlar(field) serileştirilir(serialize), ama biz nesnemizde bulunan tüm public özellik ve alanları serileştirmek istemeyebiliriz.
  • Serileştirdiğimiz özellik ve alanların nesne içindeki isimlendirmeleri kullanılır.
  • Aynı şekilde Root eleman adı olarak nesnemizin adı kullanılır.

Bu tür problemleri çözmek ve serileştirilmiş nesneyi kişiselleştirebilmek ve okunabilirliğini artırmak içinse System.Xml.Serialization namespace’inin bize sağlamış olduğu Serileştirme niteliklerini(Serialization attribute) kullanırız.


Serileştirme nitelikleri(Serialization attribute);

  • Serialize ettiğimiz veriyi XML child eleman yerine XML attribute tanımlamak için,
  • Bir XML eleman veya attribute’unun adını değiştirmek için,
  • Bir XML eleman veya attribute’unun XSD veritipini değiştirmek için,
  • XML eleman veya attribute’unun namespace’sini değiştirmek için,
  • Bir alan veya özelliği serialization işleminden çıkarmak için,

kullanılır. En çok kullanılan serileştirme niteliklerini aşağıdaki tabloda bulabilirsiniz.

Attribute Adı

Özellikler

Uygulama Alanı

Açıklama

XmlAttribute AttributeName,
DataType,
Namespace
Public Alan(Field),
Özellik(Property)
XML Attribute olarak serialize edeceğimiz alan veya özelliklerde kullanılır.
XmlElement ElementName,
DataType,
Namespace
Public Alan(Field),
Özellik(Property)
XML Element olarak serialize edeceğimiz alan veya özelliklerde kullanılır.
XMlIgnore

-

Public Alan(Field),
Özellik(Property)
Serialize etmek istediğimiz alan ve özellikleride kullanılır.
XmlRoot ElementName,
DataType,
Namespace
Public Sınıf(Class) Root eleman adını değiştirmek için kullanılır.
XmlText DataType Public Alan(Field),
Özellik(Property)
Sadece text olarak serialize edeceğimiz alan veya özelliklerde kullanılır.

Tüm nitelik(attribute) adları sonunda “Attribute” kelimesi içerir. Örneğin XmlAttribute ile XmlAttributeAttribute aynı anlamdadır ve kodumuz içinde her ikisinide kullanabiliriz.

İsterseniz bu anlattıklarımı örnek üzerinde kullanalım.

Örneğimiz için ilk bölümde oluşturduğumuz Personel ve Para sınıflarını kullanacak ve aşağıda yazılı değişiklikleri yapacağız.

  1. Root elemanın adını “Personel Bilgi” olarak değiştirecek
  2. Namespace’simize “urn:CSharpNedir” ekleyecek
  3. Departman alanı serialization işleminde değerlendirilmeyecek
  4. Email alan adı MailAdresi olarak gözükecek
  5. GirisTarihi alanının XSD veritipini “date” olarak belirlenecek.
  6. Para sınıfında Birim alanı Maas alanının niteliği(attribute) olarak gözükecek

Bu işlemleri gerçekleştirmek için Personel ve Para sınıflarımıza önce aşağıda yazılı kodu kullanarak System.Xml.Serialization Namespace’ini import ediyoruz.

using System.Xml.Serialization;

  1. Namespace’imizi import ettikten sonra 1 ve 2 nolu işlemleri gerçekleştirmek için XmlRoot niteliğinin(attribute) “Namespace” ve “ElementName” özelliklerini kullanıyoruz.
  2. 3 nolu işlemi gerçekleştirmek için XmlIgnore niteliğini(attribute) kullanıyoruz.
  3. 4 nolu işlemi gerçekleştirmek için XmlElement niteliğinin(attribute) “ElementName” özelliğini kullanıyoruz.
  4. 5 nolu işlemi gerçekleştirmek için XmlElement niteliğinin(attribute) “DataType” özelliğini kullanıyoruz.
  5. 6 nolu işlemi gerçekleştirmek için XmlAttribute niteliğinin(attribute) “AttributeName” özelliğini kullanıyoruz.

Tüm bu işlemleri gerçekleştirdikten sonra Personel ve Para sınıflarımız görünümü aşağıdaki gibi olacaktır.

using System;
using System.Xml.Serialization;namespace PersonelBilgi
{
/*
Serileştirdiğimiz nesnenin Namespace’ine “urn:CSharpNedir” ekliyor ve Root eleman adını “PersonelBilgi” olarak değiştiriyoruz.(1 ve 2 nolu işlemler)
*/ < br> [XmlRoot(Namespace="urn:CSharpNedir",ElementName="PersonelBilgi")]
public class Personel
{
public stringAd;
[XmlIgnore()]//Departman alanını Serialize etmiyoruz.(3 nolu işlem)
public stringDepartman;
[XmlElement(ElementName="MailAdresi")]//Email alan adını “MailAdresi” olarak değiştiriyoruz.(4 nolu işlem)
public string Email;
public int Yas;
public Para Maas;
[XmlElement(DataType="date")]//Giris Tarihi alanının veritipini XSD “date” veritipine çeviriyoruz.(5 nolu işlem)
public DateTime GirisTarihi;
}//Personel sınıfı sonu

public class Para
{
[XmlAttribute(AttributeName="ParaBirimi")]//Birim alanını attribute olarak tanımlıyoruz.(6 nolu işlem)
public string Birim;
public decimal Tutar;
}//Para sınıfı sonu
}//Namespace sonu

Formumuz üzerinde herhangi bir değişiklik yapmıyoruz. Gerekli değişiklikleri yapıp uygulamamızı çalıştırdıktan sonra gerekli verileri girip Serialize butonuna bastığımızda alacağımız çıktı aşağıdaki gibi olacaktır.

Deserialize butonuna bastığımızda ise alacağımız çıktıda da göreceğimiz gibi departman alanı boş olarak karşımıza çıkacaktır. Bunun nedeni ise Departman alanını XmlIgnore attribute’u kullanarak serialize işlemine tutmamamızdır.

Favorilerinize Ekleyin.
  • BlinkList
  • del.icio.us
  • Digg
  • Netvouz
  • DZone
  • ThisNext
  • MisterWong
  • Wists
  • blogmarks
  • Furl
  • Netscape
  • NewsVine
  • Reddit
  • Shadows
  • Technorati
  • YahooMyWeb
  • Fark
  • feedmelinks
  • Fleck
  • kick.ie
  • LinkaGoGo
  • Linkter
  • MyShare
  • Spurl
  • Webride