|
XML Serileştirme Nitelikleri (Serialization Attribute) |
|
Gönderiliyor lütfen bekleyin... |
|
|
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.
-
Root elemanın adını “Personel Bilgi” olarak değiştirecek
-
Namespace’simize “urn:CSharpNedir” ekleyecek
-
Departman alanı serialization işleminde değerlendirilmeyecek
-
Email alan adı MailAdresi olarak gözükecek
-
GirisTarihi alanının XSD veritipini “date” olarak belirlenecek.
-
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;
|
-
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.
-
3 nolu işlemi gerçekleştirmek için XmlIgnore niteliğini(attribute)
kullanıyoruz.
-
4 nolu işlemi gerçekleştirmek için XmlElement niteliğinin(attribute)
“ElementName” özelliğini kullanıyoruz.
-
5 nolu işlemi gerçekleştirmek için XmlElement niteliğinin(attribute) “DataType”
özelliğini kullanıyoruz.
-
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.
Başka makalelerde görüşmek üzere.
Gökhan Gürel
[email protected]
Makale:
XML Serileştirme Nitelikleri (Serialization Attribute) XML ve Web Servisleri Gökhan Gürel
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|