:::Rehberim.net Forum:::

C# ve Serileştirme(Serialization)

PROGRAMLAMA bölümündeki C ve C++ alt forumunda bulunan C# ve Serileştirme(Serialization) konusunu görüntülemektesiniz özet:C# ve Serileştirme (Serialization) Verilerimizi ortam bağımsız saklamak için serileştiriyoruz. Serileştirme nedir? Serialization (yazının bundan sonraki bölümlerinde “serileştirme” adı ile ...



Go Back   :::Rehberim.net Forum::: > WEBMASTER REHBERİM > PROGRAMLAMA > C ve C++
       

C# ve Serileştirme(Serialization)

Google Özel Arama Kayıt ol Yardım Ajanda Forumları Okundu Kabul Et
Alt 11-10-2008, 01:02 PM   #1
 
EcmeL - ait Kullanıcı Resmi (Avatar)
EcmeL
Moderator





<!-- google_ad_section_start -->C# ve Serileştirme(Serialization)<!-- google_ad_section_end --> C# ve Serileştirme(Serialization)


C# ve Serileştirme (Serialization)
Verilerimizi ortam bağımsız saklamak için serileştiriyoruz.


Serileştirme nedir?


Serialization (yazının bundan sonraki bölümlerinde “serileştirme” adı ile anılacaktır); bir nesnenin saklanacak / transfer edilecek forma dönüştürülmesi işlemidir.
Serileştirmenin tersi olarak adlandırılan Deserialization ise, bir akışın (Stream) nesne modeline dönüştürülmesi işlemi olarak adlandırılır.
.NET Framework içerisinde buluan System.Runtime.Serialization isim uzayından erişebileceğimiz serileştirme sınıfları ve araçları sayesinde, kendi nesnelerimizi istediğimiz formatta saklayabiliriz.
.NET Framework, bize serileştirme için iki metod sunar;
  • XML ve SOAP Serileştirme (XML and SOAP Serialization)
  • İkili Serileştirme (Binary Serialization)
İkili serileştirme, tür bağımlılığı açısından önemlidir. İkili serileştirme işlemi daha çok birbirinden bağımsız iki uygulama arasında nesne modellerini taşımak için kullanılır.
Bu metod ile örneğin; bir nesne modelini diskinizdeki bir dosyaya, yada networkteki başka bir bilgisayara hatta .NET remoting kullanarak farklı bir domain içerisinde bulunan bir bilgisayardaki uygulamalara bile taşıyabilirsiniz.
XML ve SOAP serileştirme ise, tür esnekliği ile ön plana çıkmaktadır. XML serileştirme işleminde sadece ortak özellik ve metodlar serileştirilebilir. Bu modelde verinizi, kullanacak olan uygulamayı kısıtlamadan saklayabilirsiniz. XML ve SOAP açık bir standart olduğundan ve her türlü uygulama tarafından rahatlıkla okunabildiğinden veri paylaşımı oldukça hızlı sağlanabilmektedir.

Kaynak Byte


__________________
Güzel ahlak; bağışlayıcılık, sabır ve tahammüldür. (Hasan-ı Basri)









EcmeL isimli üyemiz çevrimdy?ydyr. (Offline)   Alıntı ile Cevapla
Alt 11-10-2008, 01:03 PM   #2
 
EcmeL - ait Kullanıcı Resmi (Avatar)
EcmeL
Moderator






Binary ve XML serileştirme


İkili (Binary) Serileştirme:
İkili serileştirme işlemi; bir nesnenin durumunun saklama ortamına uygun hale getirilip yazılması süreci olarak tanımlanabilir. İşlem süresince, nesnenin “public” ve “private” öğeleri, sınıfın adı, sınıfı barındıran Assembly’ nin adı saklama ortamına yazılmak üzere “byte” lar akışına çevirilir.
Nesne, Deserialize edildiğinde ise nesnenin tam bir kopyası oluşturulur ve kullanıma sunulur.
XML ve SOAP serileştirme (eXtensible Markup Language & Simple Object Access Protocol)
Xml serileştirme, veri türünü dikkate almaksızın bir nesnenin tüm ortak metodlarını, özelliklerini ve değişkenlerini serileştirir. XML serileştirme ile her uygulamada kullanılabilen nitelikte sınıf örnekleri yaratılabilir.
XML serileştirmenin yıldızının parladığı noktalar ise, klasik Windows uygulamaları ile İnternet uygulamaları arasında iletişim gerektiği durumlar olarak bilinmektedir.
Bir Windows uygulamasında kullandığınız sınıf örneğini, bir Web servisi aracılığı ile Web uygulamanıza taşımanıza olanak sağlayan yegane yöntem XML serileştirmedir.
Aşağıdaki örneği incelediğinizde, XML serileştirme işlemi ile serileştirilen bir nesne modelinin nasıl bir hal alacağını görebilirsiniz.
public class Musteri
{
public string musteriAdi;
}

Yukarıdaki sınıfın bir örneği serileştirildiğinde ise, aşağıdaki hali alacaktır;
<Musteri>
<musteriAdi>Kemal Kartalayak</musteriAdi>
</Musteri>

Gördüğünüz gibi, yukarıdaki formata sahip herhangi bir datayı istediğini bir uygulamada kullanmak sizin elinizde. Tür bağımsızlığı bu gibi durumlarda kendisini göstermektedir.
Yine bir örnekle açıklamak gerekirse; Asıl veritabanı yerel bilgisayarınızda bulunan bir müşteri listesini güncel olarak web sitenizde yayınlamanız gerekmekte. Ancak bu ortam hem web sitesinden erişilebilir olmalı, hem de yerel makinenızdaki bir program tarafından okunabilmeli. İşte bu durumda veritabanı içerisindeki verileri XML ile serileştirmeniz hem Web uygulamanız tarafından okunmasını sağlayacaktır, hem de istediğiniz Windows uygulaması tarafından görüntülenebilecektir.

__________________
Güzel ahlak; bağışlayıcılık, sabır ve tahammüldür. (Hasan-ı Basri)









EcmeL isimli üyemiz çevrimdy?ydyr. (Offline)   Alıntı ile Cevapla
Alt 11-10-2008, 01:03 PM   #3
 
EcmeL - ait Kullanıcı Resmi (Avatar)
EcmeL
Moderator






Binary serileştirme hakkında


Binary Serileştirme uygulaması:
Serileştirme üzerine bu ilk makalemizde, ikili serileştirme uygulamasına yer verelim ve daha sonrakilerde de XML serileştirmeyi derinlemesine inceleyelim.
İkili serileştirme işlemi en basit yöntem ile nesneye Serializable etiketi verilerek yapılır. Aşağıdaki örneğimizde basit bir sınıf serileştirilmekte ve bir dosyaya yazılmaktadır.

[Serializable]
public class BinarySerial

{
public int sayi1;
public string strName;
}


//aşağıda bu nesnenin bir örneği yaratılmakta ve myFile.bin dosyasına serileştirilmektedir.
BinarySerial nesneOrnegi = new BinarySerial();
nesneOrnegi.sayi1 = 15;
nesneOrnegi.strName = “Hakan”;


IFormatter bicimlendirici = new BinaryFormatter();
Stream akis = new FileStream(“myFile.bin”,FileMode.Create,FileAccess .Write);
bicimlendirici.Serialize(akis,nesneOrnegi);
akis.Close();


Nesnemizin dosyadan tekrar alinmasi ise “Deserialization” işlemi ile yapılır;
IFormatter bicimlendir = new BinaryFormatter();
Stream akis = new FileStream(“myFile.bin”,FileMode.Open,FileAccess.R ead);
BinarySerial nesnem = (BinarySerial) bicimlendir.Deserialize(akis);
akis.Close();


//aşağıdaki şekilde nesnemizin değerlerini test edebilirsiniz;
Console.WriteLine(“{0}”,nesnem.sayi1);
Console.WriteLine(“{0}”,nesnem.strName);
__________________
Güzel ahlak; bağışlayıcılık, sabır ve tahammüldür. (Hasan-ı Basri)









EcmeL isimli üyemiz çevrimdy?ydyr. (Offline)   Alıntı ile Cevapla
Alt 11-10-2008, 01:04 PM   #4
 
EcmeL - ait Kullanıcı Resmi (Avatar)
EcmeL
Moderator






Uygulama


Kendi verinizi kendiniz saklayın:
Binary serileştirme ile ilgili son örneğimiz, tıpkı bir veritabanı kullanır gibi kendi verimizi saklayıp daha sonra istediğimiz zaman erişebileceğimiz bir uygulama.
Uygulamamızda, Storage sınıfı saklayacağımız veriyi biçimlendirmek için kullanacağımız sınıf olmakla beraber bu örnekte içerisinde sadece temel metodları barındırmaktadır.
Veri saklamak için klasik Hashtable yapısını kullanacağız. C# için bir konsol uygulaması başlatıyoruz ve yeni bir sınıf ekleyip adını “Storage.cs” olarak ayarlıyoruz.
Storage.cs:
//istedigimiz program datasini kaydetmek icin, serializable bir class yaratiyoruz

[Serializable]
public class Storage
{
private Hashtable storageData; //ikili tablo olarak saklayacagimiz verileri tutacak
public Storage()
{

//constructor metodumuz, deseriazlize edildigi zaman
//cagirilmayacagi icin, icerisine onemli islemleri yazmiyoruz.

storageData = new Hashtable();
}



//yeni bir datayi saklamak istedigimizde, kullanacagimiz metod.

public void AddData(object data, string identifier)
{
if(!isExists(data) || !isExists(identifier))
{
storageData.Add((object) identifier,data);
}
}



//herhangi bir data silmek istedigimizde, bu metod yardimimiza kosuyor.

public void RemoveData(string identifier)
{
if(isExists(identifier))
{
storageData.Remove((object) identifier);
}
}



//hashtable icerisindeki bir verinin, key ini aramak icin

public string GetIdentifier(object data)
{
if(isExists(data))
{
foreach(string strKey in storageData.Keys)
{
if(storageData[strKey] == data)
{
return strKey;
}
}



return null;
}
return null;
}



//storageData hashtableimizi dondurecek property.

public Hashtable storage
{
get
{
return this.storageData;
}
}



#region Herhangi bir verinin HashTable icerisinde olup olmadigini degerlendir
private bool isExists(object dataToSearch)

{
if(storageData != null)
{
if(storageData.ContainsValue(dataToSearch))
{
return true;
}
}
return false;
}



private bool isExists(string idToSearch)

{
if(storageData != null)
{
if(storageData.ContainsKey((string) idToSearch))
{
return true;
}
}

return false;
}

#endregion



Storage sınıfımız hazır olduğuna göre artık bu sınıfı kullanarak saklanan veriyi serileştiren uygulamamızı yazabiliriz.



class Class1

{

//storage nesnemizin ornegini olusturuyoruz.

private static Storage sakla;

//ikili (binary) serilestirme icin interface ornegini tanimliyoruz.

private static IFormatter IBinaryBicimle;

//serilestirilmis datayi hangi dosyada saklayacagimiz.

private static string storageFileName = "myDatabase.bin";

//dosyaya yazmak icin kullanacagimiz strem

private static Stream isle;



[STAThread]

static void Main(string[] args)

{

Console.WriteLine("Serilestirme ornek projesi, by scriptMan");



//storage nesnemize saklanacak verileri yaziyoruz

sakla = new Storage();

for(int i=0; i<50; i++)

{

sakla.AddData(i,"saklanan"+i);

}



Console.WriteLine("Serilestirme islemine baslamak icin bir tusa basin");

Console.ReadLine();



DoSerialize(); //serilestir



Console.WriteLine("Serilestirme tamamlandi, Serilestirilen veriyi okumak icin bir tusa basiniz");

Console.ReadLine();



PurgeData(); //deserialize et, ve ekrana yaz.



Console.ReadLine();

}



private static void PurgeData()

{

//serilestirilmis nesneyi geri cagirip, datayi ekrana basalim

IBinaryBicimle = new BinaryFormatter();

isle = new FileStream(storageFileName,FileMode.Open,FileAcces s.Read);

sakla = (Storage) IBinaryBicimle.Deserialize(isle);

isle.Close();



System.Collections.Hashtable serializedHashTable = sakla.storage;



foreach(string strData in serializedHashTable.Keys)

{

Console.WriteLine("Key: {0} Data: {1}",strData,serializedHashTable[strData]);

}

}



private static void DoSerialize()

{

//binaryformatter nesnesinin bir ornegini aliyoruz..

IBinaryBicimle = new BinaryFormatter();

//filestream kullanarak, olusturacagimiz dosyayi belirliyoruz..

isle = new FileStream(storageFileName,FileMode.Create,FileAcc ess.Write);

//serilestirme icin yapmamiz gereke tek sey, binaryformatter nesnemizin..

//serialize metodunu cagirmak

IBinaryBicimle.Serialize(isle,sakla);

isle.Close();



//program icerisinde olusturdugumuz hashtable' in icini temizliyoruz..

//bolece serilestirilmis nesne tekrar okundugunda, otomatik doldugunu..

//gorebilecegiz.

System.Collections.Hashtable htClear = sakla.storage;

htClear.Clear();

}

}



Uygulamamızı çalıştırmadan önce, dahil etmemiz gereken isim uzaylarını da yazmakta fayda görüyorum.



Class1 için;




System.Runtime.Serialization
System.Runtime.Serialization.Formatters.Binary
System.IO




Storage sınıfı için:



System.Collections

Serileştirme yazı dizimizin ikinci bölümünde XML serileştirmenin detaylarına ineceğiz ve örnek uygulamalar geliştireceğiz.

Hepinize iyi çalışmalar.

Hakan SÜLÜN Byte Yazarı
__________________
Güzel ahlak; bağışlayıcılık, sabır ve tahammüldür. (Hasan-ı Basri)









EcmeL isimli üyemiz çevrimdy?ydyr. (Offline)   Alıntı ile Cevapla
Yeni Konu aç Cevapla

Bookmarks

Etiketler
serilestirme, xml, uygulama, serialization, binary

Seçenekler
Stil

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık


Aradığınızı bulamadınız mı?
Sorun Cevaplayalım.

----Kapat----


Tüm Zamanlar GMT +2 Olarak Ayarlanmış. Şuanki Zaman: 07:25 PM.


Powered by vBulletin® Version 3.8.2
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.3.2
Bütün Hakları Saklıdır 2010 Rehberim.net
sohbet - Rehberim

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378