mehmetduran.com - Paylaşmak Güzeldir...
C Sharp ile Nesneler Üzerinde JSON Dönüşümleri
Bu yazımda C# ile nesneleri JSON formatına dönüştürme ve JSON formatından tekrar nesne haline çevirme işlemini nasıl yapabileceğimizi ve bu çevirme işlemlerini nerelerde kullanabileceğimizi göstermeye çalışacağım. JSON formatı tıpkı XML formatı gibi verileri düzenli şekilde ifade etmeyi sağlayan bir format. Script ve Ajax işlemlerinde oldukça fazla kullanılan bir veri formatı. XML formatına göre daha performanslı olan bir yapı. Bu yapıyı C# ile de kullanabiliyoruz. Elimizde olan tüm nesneleri JSON formatına dönüştürebiliyor veya JSON formatında olan bir veriyi nesne haline çevirip kullanabiliyoruz. Şimdi bu dönüşümleri nasıl yapacağımıza bakalım.

Öncelikle dönüştürme işlemini yapacağımız nesneden söz edeyim. Bu nesne JavaScriptSerializer nesnesi. C# içinde bu nesneyi kullanabilmek için System.Web.Script.Serialization kütüphanesini eklememiz gerekiyor. Bu kütüphaneyi ekledikten sonra dönüşüm işlemlerini yapmaya başlayabiliriz. İlk olarak basit bir C# nesnesini JSON formatına dönüştüren kodları paylaşacağım.

    Insan i = new Insan()
    {
      Adi = "Mehmet",
      SoyAdi = "Duran",
      Yasi = 22
    };
 
    JavaScriptSerializer js = new JavaScriptSerializer();
    string json = js.Serialize(i);
 
    //{
    //  "Adi" : "Mehmet",
    //  "Soyadi" : "Duran",
    //  "Yasi" = 22
    //}

Burada oluşturduğumuz nesne altında tanımlı olan Serialize metodu ile nesneyi dönüştürüyoruz. Elde edilen string nesnenin JSON formatına dönüştürülmüş halidir. Bu hali çeşitli durumlarda kullanmak zorunda olabiliriz. Uygulama geliştirirken bir yerden bir yere parametre ile veri aktarıyoruz. Bazı durumlarda veriler string türünden ifade edilmek durumundadır. İşte bu durumlarda string dışında bir veri aktarmamız gerekiyor ise buradaki yöntemi kullanıp nesneyi önce JSON formatına dönüştürüp bir string olarak elde edebilir ve parametre olarak taşıyabiliriz.

Yukarıda bir nesneyi JSON formatına dönüştürme kodları yer almakta. JSON formatına dönüştürdükten sonra dönüştürülmüş yapıyı tekrar nesne haline de çevirebiliyoruz. Bunu da aşağıdaki kodlarda görebiliriz.

    List<Insan> insanlar = new List<Insan>()
    {
      new Insan(){ Adi = "Mehmet", SoyAdi = "Duran", Yasi = 22 },
      new Insan(){ Adi = "Sinan", SoyAdi = "Haymana", Yasi = 18 },
      new Insan(){  Adi = "Semih", SoyAdi = "Safranbolu", Yasi = 14 },
      new Insan(){  Adi = "İsmail", SoyAdi = "Bergama", Yasi = 26 },
      new Insan(){  Adi = "Yiğit", SoyAdi = "Yozgat", Yasi = 17 },
    };
 
    // Json'a dönüştürme
    JavaScriptSerializer jss = new JavaScriptSerializer();
    jss.MaxJsonLength = 1000000;
    string sonuc = jss.Serialize(insanlar);
    File.WriteAllText(Server.MapPath("~/log.json"), sonuc);
 
    // Json olarak okunan verileri nesnelere aktarma ve kullanma
    JavaScriptSerializer jsd = new JavaScriptSerializer();
    var loglar = jsd.Deserialize<List<Insan>>(File.ReadAllText(Server.MapPath("~/log.json")));
    foreach (Insan insan in loglar)
    {
      // işlemler...
    }
 

Bu kodlarda dizi yapısında bir nesne önce JSON formatına dönüştürülüyor ve bir dosyaya kayıt ediliyor. Daha sonra da dosyaya kayıt edilen JSON formatındaki string okunarak nesnelere dönüştürülüyor. Burada da oluşturduğumuz nesne altında bulunan Deserialize metodunu kullanıyoruz. Bu metot ile JSON formatında verileri nesne haline dönüştürüyoruz. Metodu kullanırken JSON formatından elde edilecek nesne türünü de yukarıdaki gibi belirtebiliyoruz. Yukarıdaki kod bloğunun çalışması ile elde edilen dosyanın içeriği aşağıdaki gibidir.

C Sharp ile Nesneler Üzerinde JSON Dönüşümleri

Görüldüğü gibi nesneler üzerinde JSON dönüşümlerini bu şekilde yapabiliyoruz. Bu dönüşümleri birçok yerde kullanabiliriz. Özellikle bazı durumlarda bu dönüşümlere ihtiyaç duyabiliriz. String olarak nesne taşımak durumunda kalırsak bu dönüşümü kullanabiliriz. Örneğin geliştirdiğim Silverlight uygulamalarından birinde Silverlight tarafına html taraftan verileri bu şekilde dönüştürerek aktardım. Bunun dışında Ajax işlemlerinde hem kullanıcı tarafından alınan parametreler hem de kullanıcı tarafa gönderilen cevaplar JSON formatında olabilmekte.

Son kod bölümündeki gibi bir kullanım ile verileri yedekleme, loglama amaçlı da bu yapıyı kullanabiliriz. Örneğim uzun süredir sitemde hataların loglarını tutuyorum ve veritabanındaki boyutu oldukça arttı. Veritabanında fazla veri tutmak yerine oradaki verilerin bir kısmını json formatında saklayan bir sistem geliştirdim ve kullanmaya başladım. Buradaki gibi verileri logluyorum ve yine buradaki gibi dönüştürme işlemlerini yaparak logların da içeriğini takip edebiliyorum. Böylece veritabanında gereksiz veri tutmamış oluyorum. Bu ve bunun gibi örnekler için bu yapıyı kullanabiliriz.

İyi çalışmalar.
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar Jquery, Ajax ve FaceBox ile Edit Update Uygulaması - Örnek Uygulama Asp.net Uygulamalarında Namespace ve Class Kullanımı Jquery 1.3 Versiyonu için CHM Dokümanı Jquery ile Accordion Menü - Alan Hazırlama Asp.net'te Jquery ve Ajax ile Veritabanına Kayıt Ekleme
Yorumlar
Yorum Yaz
RSS Yorum Takibi
Özgür S. 03 Temmuz Cumartesi 2010 16:07 #1
Yine harika bir makale...
Ali SONTEPE 14 Temmuz Çarşamba 2010 09:11 #2
Arkadaşım paylaşımın için teşekkürler peki burda silme işlemini nasıl yapabiliriz.Örneğin log da tuttuğumuz herhangi bir kaydı nasıl silebiliriz.Yardımların için sağol.
Mehmet Duran 14 Temmuz Çarşamba 2010 23:58 #3
Merhaba. Öncelikle log dosyalarında kayıt silmek pek mantıklı bir iş gibi gelmiyor. Eğer silinecek veya düzenlenecek bir veri söz konusu ise bunu log olarak değil de veritabanında veri olarak tutmak daha mantıklı. Ancak log dosyalarında da bu işelm yapılabilir ama çok masraflı olur. Kısaca bahsedecek olursak tüm logları okur silmek veya güncellemek istediğin veriyi bulur işlemi yapar ve tüm logları tekrardan dosyaya yazarsın. Buradaki mantıkı bunu gerektiriyor.
Hasan TURHAN 26 Ekim Salı 2010 16:07 #4
Arkadaşım çok sağlam bir bloğun var kafamda ki çoğu soru işaretine çözüm bulabiliyorum. Jquery ile (ajax ile) verileri çekiyorum fakat 2000 adetlik verinin tamamını aynı anda çekmeye çalıştığımda hata veriyor.Bunun nedeni ne olabilir.Acaba (msg.d) ile ekrana basarken veriyi (d) nesnesinin bir karekter sınırlaması mı var yardımcı olursan sevinirim.Çok önemli arkadaşım. Yardımlarını bekliyorum.
Mehmet Duran 26 Ekim Salı 2010 16:44 #5
@Hasan, öncelikle teşekkür ederim. Bu işlemlerde herhangi bir sınır yok. Ancak dataType olarak JSON seçilmiş ise sunucu tarafından alınan cevaplar JSON formatına dönüştürülüyor. Bu dönüşüm için default olarak bir sınır var. Eğer bu sınır aşılırsa .Net hata üretiyor. Bu hatayı almamak için projenin web.config dosyasında bu sınırı belirtebiliyorsun. Bu belirtimi buradaki yazımda belirtmiştim. Eğer JSON formatında değilde HTML veya XML formatta verileri alıp kullanma ihtimalin varsa o şekilde de işlem yapabilirsin. Böylece JSON dönüştürme işleminden ve hata almaktan kurtulursun. Verdiğim linkteki yazımda bu konuyla ilgili bilgileri de bulabilirsin.
Hasan TURHAN 26 Ekim Salı 2010 22:23 #6
Kardeşim yardımların için teşekkür ederim.Kardeşim yaptığın bu paylaşımlar sayesinde çok yol aldık.Teşekkürü bir borç bilirim.
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Hizmet amaçlı işler başarıya, kar amaçlı olanlar ise başarısızlığa yöneliktir.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009