Bu site emekli olmuştur. Arşiv amaçlı olarak
BT AKADEMİ
sponsorluğunda yayın hayatına devam etmektedir.
Ana Sayfa
.net TV
Makaleler
Kaynak Kod
Haberler
Serbest Köşe
Canlı Köşe
Forum
C#nedir?
Ekibimiz
RSS
ADO.NET/SQL
C / Sys Prog.
Genel
Mono ve .NET
Silverlight
XML / Web Serv.
X86 Assembly
C++ / C++.NET
J#.NET / Java
.NET 3.x
UML / Analiz
Yazılım Müh.
ASP.NET
C# / VC#/.NET
Mobil Prog.
PHP 5
YAZAR HAKKINDA
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:
deserialize
edilmis
formumuza
formumuzun
islemi
islemine
islemini
level1
nesnesi
personel
serialization
serialize
verinin
verisini
veriyi
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
:
2.6.2004
Okunma Sayısı
:
64089
Yorum Sayısı
:
1
yorum yaz
SİTE İÇİ ARAMA
Ü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.
C#nedir? hesabınız yok mu?
Üye olabilmek için
tıklayın
.
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.
Silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
Bende Yazmak İstiyorum
Blogroll
Burak Selim Şenyurt
Bellek Yönetiminde Verimlilik için İpuçları (Rust Odaklı)
29.6.2025
Burak Selim Şenyurt
Rust ve Güvenli Bellek Yönetimi Hakkında
29.6.2025
Diğer Herşey
»
Makaleler RSS
»
Video Gönder
»
Makale Gönder
»
Serbest Köşeye Yazı Gönder
»
Yazar Başvurusu
»
C#nedir? Ekibinde Olmalıyım!
Sponsorlar
Ana Sayfa
/
Makaleler
/
XML / Web Serv.
/
.NET ile "XML Serialization" ve "Deserialization" İşlemleri
.NET ile "XML Serialization" ve "Deserialization" İşlemleri
Favorilerime Ekle
Gönderiliyor lütfen bekleyin...
arkadaşıma gönder
Arkadaşınızın email adresi:
*
Mesajınız:
Serialization(serileştirme) kısaca nesnenin(object) bir kopyasını kullanarak o kopyayı kolayca ulaşılabilir bir forma çevirme ve nesnenin o anki durumunu koruma işlemidir. Serialization işlemini 3 farklı yöntemle gerçekleştirebiliriz. Bu yöntemler: Binary, SOAP ve XML’dir. Serialize(serileştirme) ettiğimiz nesneyi orjinal haline getirme işlemine ise Deserialization denir. Serialization işlemi uygulanmış olan nesnemiz biz Deserialization işlemi uygulamadıkça belirttiğimiz yerde kullandığımız Serialization(Binary, SOAP veya XML) formatındadır. Bu sayede nesnenin ömrü uygulamanın ömrüne bağlı olmaktan çıkar. Örneğin bu sayede bir uygulamayı sonlardırdığımız da verinin son durumunu ağ üzerindeki başka bir arkadaşımıza göndererek o arkadaşımızın verinin son halini kullanmasını sağlayabiliriz.
Biz şimdi bu formatlardan XML Serialization ve .NET Framework’ün bize bu işlem için sunduğu System.Xml.Serialization namespace’ine bakalım.
İsterseniz konumuza girmeden önce aşağıda ki sorunun cevaplarını bir inceleyelim :
Neden XML Serialization kullanalım?
Verileri farklı uygulamalarda kullanmak için,
Verileri Internet üzerinden taşımak için. XML Serialization yapmamızın en önemli nedeni, XML’in
open standart(açık standart)
bir dil olması
Verilerin Internet üzerinden kolay bir şekilde aktarımını ve paylaşımını sağlamaktadır.
Bir uygulamaya dışarıdan XML verilerini almak için. Örneğin; bir ADO.NET uygulamasında XML verisini Deserialize edip o veriyi Dataset içinde kullanabiliriz.
Bir uygulamadaki nesnelerin son durumlarını korumak için.
Tabiki XML Serialization işleminin bazı kısıtlamaları var. Bunlar:
Sadece public property(özellik) ve field’ler(alanlar) serialize(serileştirme) edilebilir.
Metot ve indeksleyiciler ile private tanımlanan üye elemanlar serileştirilemez.
Sadece verinin kendisi ve sınıfımızın yapısı serialize edilir. Veritipleri ve assembly bilgileri serileştirilmez.
Serileştirilecek sınıfta mutlaka bir varsayılan yapıcı metot bulunmak zorunda.
Eğer serialize edeceğimiz sınıf nesnesi yukarıda yazılı kısıtlamaları içeriyorsa Binary veya SOAP Serialization yöntemlerinden uygun bir tanesini seçmeliyiz.
XML Serialization’a genel olarak baktıktan sonra Serialization ve Deserialization işlemlerini gerçekleştirmek için kullanacağımız ve
System.Xml.Serialization
isim alanı içinde bulunan XmlSerializer sınıfına bir göz atalım
Sınıfımızın Serialize ve Deserialize işlemlerinde kullanılmak üzere 3 adet metodu bulunmaktadır. Bunlar:
Serialize()
Nesneleri XML olarak serileştirmek için kullanılır.
Deserialize()
XML olarak serileştirmiş veriden nesne oluşturmak için kullanılır.
CanDeserialize()
Verinin deserialize işlemine tabi tutulup tutulamayacağına karar verebilmemiz için kullanılır.
İsterseniz örnek bir uygulama üzerinde bu metotların kullanımını görelim.
1
. Uygulamamız için "Windows Application" şablonunu seçiyoruz ve formumuza 5 adet Textbox, 2 adet Groupbox, 2 adet Button, 1 adet DateTimePicker ve 1 adet ComboBox ekliyoruz. Formumuzun görünümü şekilde görüldüğü olacak.
2
. Projemize Serialize işlemi için kullanacağımız aşağıdaki gibi bir tane sınıf bildirimi ekliyoruz. Ve bu sınıf içerisinde(aynı isim alanında olmak üzere) ikinci bir sınıf daha bildiriyoruz.
public class Personel
{
public string Ad;
public string Departman;
public string Email;
public int Yas;
public Para Maas;
public DateTime GirisTarihi;
}
public class Para
{
public string Birim;
public decimal Tutar;
}
3
. Sınıflarımızı oluşturduktan sonra Formumuza dönüyor ve öncelikle kullanacağımız sınıflar için gerekli olan isim alanlarını aşağıdaki gibi formumuza ekliyoruz.
using System.Text;
using System.IO;
using System.Xml.Serialization;
4
. Serileştirilecek nesnemizi tutmak için sınıf seviyesinde bir string değişken yaratıyoruz.
string strPersonelData;
5
. Artık sıra Serialization işlemini gerçekleştirmek için gereken kodları yazmaya geldi. Bunun için Serialize butonumuzun Click olayının altına aşağıdaki kodu yazıyoruz.
private void btnSerialize_Click(object sender, System.EventArgs e)
{
// Yeni bir Personel Sınıfı Yaratıyoruz Personel
yeniPersonel= new Personel();
// Personel Bilgilerini Personel nesnesine kaydediyoruz.
yeniPersonel.Ad=txtName.Text;
yeniPersonel.Departman=txtDept.Text;
yeniPersonel.Email=txtMail.Text;
yeniPersonel.Yas= int.Parse(txtAge.Text);
yeniPersonel.GirisTarihi=Convert.ToDateTime(dtpHireDate.Value.ToShortDateString());
// Maaş Bilgilerini Personel sınıfı altında tutmak için
// yeni bir Para Sınıfı yaratıyor ve Bilgileri kaydediyoruz.
yeniPersonel.Maas=new Para();
yeniPersonel.Maas.Tutar=Convert.ToDecimal(txtAmount.Text);
yeniPersonel.Maas.Birim=cmbCurrency.SelectedItem.ToString();
// Serialize edilmiş olan nesneyi tutacak değişkene fonksiyonumuzun
// geri dönüş değerini atıyoruz ve Messagebox kullanarak gösteriyoruz.
strPersonelData = SerializeObject(yeniPersonel);
MessageBox.Show(strPersonelData);
}
6
. Şimdi de Serialization işlemini gerçekleştirecek olan metodumuzu yazıyoruz.
//Nesnemizi Serialize ederken kullanacağımız metot
private string SerializeObject(Personel PersObject)
{
// Yeni bir XmlSerializer nesnesi yaratıyoruz ve Serialize
// edilecek sınıfımızın adını Constructor parametresi olarak gönderiyoruz.
XmlSerializer MySerializer = new XmlSerializer(typeof (Personel));
// XML olarak Serialize edilmiş nesnemizi tutacak olan StringWriter yaratıyoruz.
TextWriter TW = new StringWriter();
// Yarattığımız XmlSerializerın Serialize Metodunu kullanarak
// nesnemizi Serialize ediyoruz.
MySerializer.Serialize(TW, PersObject);
// Serialize edilmiş nesneyi geri döndürüyoruz.
return TW.ToString();
}
7
. Bu işlemleri yaptıktan sonra uygulamamızı çalıştırdığımızda karşımıza çıkacak olan Dialog Kutusu aşağıdaki gibi olacaktır.
8
. Serialize edilmiş bir veriyi Deserialize etmek istersek ne yapmamız lazım sorusunun cevabını aşağıda yazılı kodları inceleyelerek göreceğiz ama öncelikle geri dönüş değerini göstermek için bir adet Form tasarlayalım. Bu formumuza istediğimiz adı verdikten sonra formumuza 1 adet TextBox ve 1 adet Button ekliyoruz. Formumuzun görüntüsü şekildeki gibi olacak.
9
. Deserialize edilmiş veriyi gösterecek olan bu formumuzun sadece Kapat butonunun Click eventine aşağıdaki kodu yazıyoruz.
private void btnExit_Click(object sender, System.EventArgs e)
{
this.Dispose();
}
10
. İkinci formumuzun tasarımı bittikten sonra Deserialization işlemine geçelim. Bunu yapmak için Main Form sınıfımıza aşağıdaki kodları eklememiz yeterli olacaktır. Gerekli olan açıklamalar kodların üzerinde yazdığı için ekstra açıklama yapma gereği görmüyorum.
private void btnDeserialize_Click(object sender, System.EventArgs e)
{
// Deserialization işlemini gerçekleştirmek için kullanacağımız
// metodu çağırıyor ve parametre olarak Deserialization işlemine tabi tutacağımız veriyi gönderiyoruz.
DeserializeXml(strPersonelData);
}
// Deserialization işlemi için kullanılacak olan metod
private void DeserializeXml(string XmlData)
{
// Yeni bir Personel Nesnesi Yaratıyoruz Personel ReturnedEmployee;
// DeSerialize işleminde kullanılmak üzere yeni bir XmlSerializer
// nesnesi yaratıyor ve Serialize edilmiş verinin hangi nesne(Class) tipine çevirileceğini gösteriyoruz.
XmlSerializer MyDeserializer = new XmlSerializer( typeof (Personel));
// XML Verisini tutmak için bir StringReader yaratıyoruz.
StringReader SR = new StringReader(XmlData);
XmlReader XR= new XmlTextReader(SR);
// XML verisinin Deserialize edilip edilmeyeceğini kontrol ediyoruz.
if (MyDeserializer.CanDeserialize(XR))
{
// Ve XML verisini Deserialize ediyoruz.
ReturnedEmployee = (Personel)MyDeserializer.Deserialize(XR);
ShowEmployeeData(ReturnedEmployee);
}
}
// Geri dönüş değerini düzgün bir hale getirmek için kullandığımız metod
private void ShowEmployeeData(Personel PersObject)
{
// Deserializationişlemi yapılmış veriyi tutacak olan formu yaratıyoruz.
ReturnForm ReturnedData = new ReturnForm();
// Veriyi düzgün bir şekilde göstermek için StringiBuilder sınıfı ve
// bu sınıfın Append metodunu kullanıyoruz.
StringBuilder OutputString= new StringBuilder("Personel Bilgileri: \r\n");
OutputString.Append("Adı: " + PersObject.Ad + "\r\n");
OutputString.Append("Departmanı: " + PersObject.Departman + "\r\n");
OutputString.Append("Email: " + PersObject.Email + "\r\n");
OutputString.Append("Yaşı: " + PersObject.Yas.ToString() + "\r\n");
OutputString.Append("İşe Başlangıç Tarihi: " + PersObject.GirisTarihi.ToString() + "\r\n");
OutputString.Append("Maaşı: " + PersObject.Maas.Tutar + " " + PersObject.Maas.Birim + "\r\n");
// StringBuilder sınıfımızın Geri dönüş verisini göstereceğimiz form üzerindeki Textboxın Text özelliğine atıyoruz ve Formumuzun ShowDialog metodunu kullanarak formumuzu gösteriyoruz.
ReturnedData.txtReturn.Text = OutputString.ToString();
ReturnedData.ShowDialog();
}
Tüm bu kodları yazdıktan ve gerekli olan verileri girdikten sonra önce Serialize daha sonra da Deserialize butonuna bastığımızda karşılığında bize gelecek olan görüntü aşağıdakine benzer bir görüntü olacaktır.
Evet arkadaşlar "XML Serialization"ın üzerine benim yazacaklarım şimdilik bu kadar. Bir sonraki makalemdeXml Serialization’ın kontrolü üzerinde duracağım. Soru ve önerileriniz için mail adresimden bana ulaşabilirsiniz. En kısa zamanda görüşmek üzere.
Makale:
.NET ile "XML Serialization" ve "Deserialization" İşlemleri XML ve Web Servisleri Gökhan Gürel
Yazılan Yorumlar
Yorum Yaz
EKİ
4
2009
İsmail Zambakcı
/
üye hakkında
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
Dizayn ve Kodlama
bt
akademi
. Tüm Hakları Saklıdır © Copyright 2002-2009 c#nedir?com
Makaleler
Serbest Köşe
Makale Gönder
.Net TV
Video Gönder
Canlı Köşe
Kaynak Kod
Forum
Haberler
Röportajlar
Anketler
C# Nedir?
İletişim
Site Haritası
RSS
Favorilere Ekle
Üyelik
Hesap Aktivasyon
Ekibimiz
Ekibe Katıl