ASP.NET’te DataTable içeriğini JSON biçimine dönüştürmek


Veritabanından gelen sorgu sonucunu DataAdapter nesnesi ile DataTable nesnesine Fill() metodu ile doldurduktan sonra bir kod gördüm ki tam anlamıyla amele işiydi. Buna karşılık bu kodun amacını sağlayan ve daha pratik bir çözümü burada paylaşmaya karar verdim.

Öncelikle o “amele işi” kodu göstermek istiyorum:

Mesela adında bir tablomuz olsun.

İlgili şahıs bu tablodan şu şekilde bir sorgulama yapsın:

SELECT id, baslik, yazar, tarih, kategori, durum FROM Mesela

bu şekildeki bir sorgu sonucunu json string’e dönüştürmek için bir metot yazalım.

private string ameleJson(DataTable dt)
{
string donus = "[";
for (int r = 0; r < dt.Rows.Count; r++)
{
donus += "{";
donus += "\"id\":\"" + dt.Rows[r]["id"].ToString() + "\",";
donus += "\"baslik\":\"" + dt.Rows[r]["baslik"].ToString() + "\",";
donus += "\"yazar\":\"" + dt.Rows[r]["yazar"].ToString() + "\",";
donus += "\"tarih\":\"" + dt.Rows[r]["tarih"].ToString() + "\",";
donus += "\"kategori\":\"" + dt.Rows[r]["kategori"].ToString() + "\",";
donus += "\"durum\":\"" + dt.Rows[r]["durum"].ToString() + "\"";
donus += "},";
}

    donus = donus.Substring(0, donus.Length - 1) + "]";  //cambazlığa bak sen. En sondaki virgülü böyle kaldırıyor.

return donus;
}

Şimdi göstereceğim kodda ise bu tip cambazlıklara, aksiyonlara hiç gerek yok. Hatta sorguda hangi alanların seçildiğini bilmeye bile gerek yok. Gelen veri setini döngü içinde serileştirip geriye döndürüyoruz. Gerisi tamamdır. Bunu başarmak için en başta System.Web.Script.Serialization.JavaScriptSerializer sınıfından faydalanarak bir örneğini oluşturuyoruz.


public string artizJson(DataTable dt)
{
System.Web.Script.Serialization.JavaScriptSerializer seriyeBagla = new System.Web.Script.Serialization.JavaScriptSerializer();
List satirlar= new List();
Dictionary satir;
foreach (DataRow dr in dt.Rows)
{
satir= new Dictionary();
foreach (DataColumn sut in dt.Columns)
{
//her sütunda "sütun adı":"değeri" şeklinde yapı oluştur
satir.Add(sut.ColumnName, dr[sut]);
}
satirlar.Add(satir);
}
return seriyeBagla.Serialize(satirlar);
}

En büyük avantajı:

  1. Diyelim ki 10 çeşit bilgi barındıran bir JSON yapacaksınız. Bunu ameleJson() ile de pekala başarabilirsiniz. Ya 120 çeşit bilgi barındıran bir veri setiniz varsa?
  2. artizJson()’da ise böyle bir kaygımız yok.
  3. Herşeyi bırakın şu derli-toplu, okunabilirliği yüksek kod daha şık durmuyor mu?
  4. Madem framework kullanıyoruz. Neden nimetlerinden faydalanmıyoruz?

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s