C#nedir?com
 
YAZAR HAKKINDA
Gökhan Gürel
Gökhan Gürel
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
2 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: alanini alaninin asagida attribute degistirmek edecegimiz eleman islemi isleminde islemleri personel public serialize serilestirme veritipini XML / Web Serv. Gökhan Gürel
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : XML / Web Serv.
Yayınlanma Tarihi : 9.6.2004
Okunma Sayısı : 27110
Yorum Sayısı : 1     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 29.10.2020
Turhal Temizer
Mac OS/X Removing CUDA 29.10.2020
Burak Selim Şenyurt
Sekiz Saatlik Sonsuz Döngü 29.10.2020
Burak Selim Şenyurt
Switch Case Kullanmadan Kod Yazılabilir mi? 29.10.2020
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
XML Serileştirme Nitelikleri (Serialization Attribute)
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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.

Başka makalelerde görüşmek üzere.

Gökhan Gürel

gurel_gokhan@hotmail.com

Makale:
XML Serileştirme Nitelikleri (Serialization Attribute) XML ve Web Servisleri Gökhan Gürel
  • Yazılan Yorumlar
  • Yorum Yaz
EKİ
4
2009
Merhabalar Serialize ve deserialize işlemlerinde yapmaya çalıştığım bir şey var. Nasıl yapacağımı bulamadım. Yapmaya çalıştığım konu, her bir property serialize edilirken ve deserialize edilirken serialize değerini ve deserialize olurken propertynin serilestirilmis değerine göre property değerini kendim vermek istiyorum.Örneğin COM objesi olarak bir GIS connection nesnesi serilestirilirken ID değerini yazıp deserialize ederken de bu ID değerinden Com nesnesini tekrar oluşturmak istiyorum.ISerializable nesnesini kullandığım zaman tüm propertyler icin birer metot var.Ben sadece bir kac property icin bu metodu kullanmak istiyorum. Nasıl yapabilirim?Teşekkürler.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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