Enis Kurtay
Asistan
- Katılım
- 8 Eylül 2008
- Mesajlar
- 204
- Reaksiyon puanı
- 8
- Puanları
- 18
Merhaba dostlar.
Shiftdelete Forumlarında en son ne zaman konu açtım, hatırlamıyorum. Özellikle C# konusunda.
Kendi web adresimde de yer alan bir makaleyi, C# ile uğraşan arkadaşlara referans olması niteliği ile burada JSON nedir ve C# ile JSON kullanımını anlatacağım, şimdiden iyi okumalar.
Bu makalede neleri öğreneceksiniz?
1. JSON Nedir?
Aslında JSON (Javascript Object Notation), JavaScript tarafından bize sunulmuş bir nimettir. Türkçesi ise Javascript Nesne Gösterimidir. Wikipediaya göreinsanlar tarafından okunabilen bir veri değişimi biçimidir denilse de,insanlar dediği kısım bence yazılım geliştiriciler içindir.
JSON bir ağaç yapısıyla çalışır ve XML mantığına benzerdir (kısmende benzer değildir). Ağaç yapısından ve kendisinin sunduğu özellikten dolayı, XMLden daha kolay ve daha hızlı işleyebilmekteyiz. Bağımsızdır, kısadır ve anlaşılabilir bir yapıdadır. XML ile karşılaştıracak olursak, benzerliğini göreceksiniz (Şekil 1).
Şekil 1
Yukarıda örnek göstermek amacıyla, Mersin Üniversitesine ait üç öğrencinin JSON ve XML türlerine göre bir örneği mevcuttur. Dikkatinizi çekerse JSON daha kısa ve daha anlamlıdır. Köşe parantezlerin [] birer dizi olduğunu, süslü parantezlerin {} ise {anahtar:değer} mantığı taşıdığını görebilirsiniz.
Peki JSON bize nerede işe yarayacak? Eğer sizin tarafınızdan oluşturulmamış ikinci bir kaynaktan veri alışverişinde bulunmak isterseniz, JSON hayat kurtarır nitelikte olacaktır. Örneğin Twitter APIsi kullanarak bir geliştirmek isterseniz karşınıza JSON çıkacaktır. Hatta pek çok sistem JSON veri paylaşımında bulunmaya başlamıştır. Googleda Free Json API yazarsanız, istemediğiniz kadar JSON ile karşılaşabilirsiniz.
Eğer XML ile uğraştıysanız, JSONın Key ve Value mantığı gibi bir durumunun olduğunu göreceksiniz. Nedir bu Keyleri ve Valueları, yukarıdaki örnekten yola çıkalım ve örnek JSON kodumuzu Şekil 2de verelim.
Şekil 2
universite bir anahtardır (Key), Mersin ise değeridir (yani Value).
ogrenciler bir anahtardır ve değeri aslında bir dizidir. Çünkü değer içerisinde birden çok veri vardır. İnceleyecek olursak bu diziyi, içerisinde üç adet isimdiye anahtarlar vardır. Bu anahtarların da aldığı değerler (Kurtay, Serdar, Şafak)vardır.
{nekadar:100 Lira} örneği de bir JSONdur. nekadar ifadesi anahtar iken100 Lira ise değeridir. Yani JSONun temel kalıbı {key:value} şeklindedir.
Temel bilgileri öğrendiğimize göre, gelelim en baba soru veya sorulara..
Bu JSONı nasıl oluşturacağız? Bunları tek tek Şekil 2deki gibi mi elimizle biz mi yazacağız?
El-cevap çok sevdiğim dostumun deyişi ile amelelik yapmaya gerek yok, vardır bir yolu..
2. C# ile JSON Verileri Oluşturmak
Öncelikle Visual Studioda bir Console uygulaması açalım. Solution Explorer üzerinden References kısmına sağ tıklayarak, JSON için ilgili kütüphaneyi kuralım (Şekil 3 ve Şekil 4).
Şekil 3
Şekil 4 JSON diye arayınız, Newtonsoft.Json seçiniz, Install ile kütüphaneyi kurunuz.
Şu ana kadar yaptıklarımızı toparlayacak olursak, JSON için temel bilgilerini öğrendik ve bunu kendi C# uygulamamız için temel kütüphanesi kurmayı gerçekleştirdik. Gelelim uygulama yazılımına. Her şeyden önce tabii ki kütüphanemizi kurduysak, JSON için gerekli using tanımını yapmak lazım. Kod bloğumuzun en üst kısmına gerekli tanımı yapıyoruz.
using Newtonsoft.Json;
Şekil 2deki JSON kod örneğini bizim yazılımımıza entegre etmek için öncelikle sınıflar ve Generic sınıflarla çalışacağız. Eğer hakkında bilgi sahibi değilseniz, Google amca buyurunuz.
Eğer C# uygulaması için yukarıdaki JSON örneğinin anahtarlarından (yani Key) bir class oluşturmakta zorlanıyorsanız, şu sitede otomatik class oluşturabilirsiniz C# için, buyurunuz. (Şekil 5 ve Şekil 6)
Örnek JSON Kodu
{
"universite":"Mersin",
"ogrenciler":[
{"isim":"Kurtay"},
{"isim":"Serdar"},
{"isim":"Şafak"}
]}
Şekil 5 JSON Kodunu yapıştırıp SUBMIT edelim.
Şekil 6 Sayfanın aşağısındaki oluşturan kodu kopyalayalım ve projemize geçelim.
Kendi kodumuzu kopyalarken kodda yer alan Example olan kısmı, kendi projemizde UniversiteOgrencileri olacak şekilde değişip yapıştırıyorum (Şekil 7).
Kod
public class Ogrenciler
{
public string isim { get; set; }
}
public class UniversiteOgrencileri
{
public string universite { get; set; }
public IList ogrenciler { get; set; }
}
Şekil 7
Bu arada Şekil 7deki gibi using kısmını değiştirmeyi unutmayınız..
Sıra geldi ilgili Classı kullanarak yeni verileri JSON gibi oluşturmaya..
Generic class ile ilgili alanlara atamayı yaptıktan sonra aslında tek yapmamız gereken, JsonConvert.SerializeObject() metodu ile JSON oluşturmaktır. Gelsin kodlar..
UniversiteOgrencileri universiteOgrencileri = new UniversiteOgrencileri();
universiteOgrencileri.universite = "Koç";
List p = new List();
Ogrenciler ogrenci1 = new Ogrenciler{ isim = "Şafak" };
Ogrenciler ogrenci2 = new Ogrenciler{ isim = "Dilara" };
Ogrenciler ogrenci3 = new Ogrenciler{ isim = "Can" };
p.Add(ogrenci1);
p.Add(ogrenci2);
p.Add(ogrenci3);
universiteOgrencileri.ogrenciler = p;
string json = JsonConvert.SerializeObject(universiteOgrencileri);
System.Console.WriteLine(json);
Çıktıyı görelim (Şekil 8).
Şekil 8
Oluşturma işlemimiz başarılı! Format biçimini beğenmedi iseniz, Google amca sayesinde bunu biçimsel hale getirebilirsiniz, buyurunuz. (Şekil 9)
Şekil 9
3. C# ile JSON Verilerini Okutmak
Bence en basiti burası. Eğer JSONdan elde ettiğiniz bir veri varsa, bunu aktarmayı tek kod ile gerçekleştirebilirsiniz. Hele Classınızda JSONa uygunsa, tek kodunuz sizi bekliyordur.
İşimizi zorlaştıralım ve bir örnek senaryo düşünelim. Diyelim ki www.xyzuniversitesi.com/ornek.json adresinden bir üniversiteye ait öğrencilerin bilgilerini okumaya yarayan bir uygulama yazacaksınız.
İlgili öğrenci bilgileri de Şekil 9daki gibi olsun.
Şekil 9
İhtiyacımız olan ilk şey JSONdan gelecek veridir. Çünkü öğrenci verileri burada tutulmaktadır. Bize de veriler lazımdır. Algoritma şeklinde düşünürsek ilk ilgili siteye talep oluşturmamız, ardından talep sonucu elde ettiğimiz değeri bir değişkene aktarmamız gerekmektedir. Aşağıdaki kod ile ilgili siteye JSON verisini elde etmek için talep oluşturalım, ardından elde ettiği verileri jsonVerisiadlı değişkene aktaralım.
string url = "<a href="http://www.eniskurtayyilmaz.com/ornek.json" target="_blank">www.xyzuniversitesi.com/ornek.json</a>";
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
string jsonVerisi = "";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
StreamReader reader = new StreamReader(response.GetResponseStream());
//jsonVerisi adlı değişkene elde ettiği veriyi atıyoruz.
jsonVerisi = reader.ReadToEnd();
}
Bunu yazdıktan sonra aman ha, using System.IO; ve using System.Net; tanımlarını yapmayı unutmayalım!
Neyse.. İlgili JSON için Class ve Generic class oluşturmayı öğrenmiştik yukarıda bir yerlerde. Dikkat ederseniz aynı anahtar (Key) üzerinden çalışmaktayım, sadece değerler (Value) farklıdır. Bu yüzden ilgili Classı silmemize gerek kalmayacak şimdilik bu uygulamada. Eğer siz başka bir çalışma yapıyorsanız, siz kendiniz bayağı yukarıda bahsettiğim gibi otomatik oluşturabilecek sitelerden faydalanarak bu işlemi yapabilirsiniz.
İlgili JSONdaki verileri kendi uygulamamızdaki Classa aktarıp, bundan sonra istediğimizi yaptırabiliriz. Dedim ya tek kod, buyurunuz.
UniversiteOgrencileri universiteOgrencileri = JsonConvert.DeserializeObject(jsonVerisi);
Yukarıda universiteOgrencileri adlı UniversiteOgrencileri türü olan Classa, DeserializeObject() Metodu ile ederek elde ettiğimiz verilerin hepsini düzenli olarak işledik. Tabi burada önceden bu hiyerarşiye uygun oluşturduğumuz Class önemli olan.
E hadi bir sonraki makalede görüşmek dileğiyle.
Bu makalede yer alan tüm kodlar için : https://github.com/eniskurtayyilmaz/csJsonKullanimi
Enis Kurtay YILMAZ
Shiftdelete Forumlarında en son ne zaman konu açtım, hatırlamıyorum. Özellikle C# konusunda.
Kendi web adresimde de yer alan bir makaleyi, C# ile uğraşan arkadaşlara referans olması niteliği ile burada JSON nedir ve C# ile JSON kullanımını anlatacağım, şimdiden iyi okumalar.
Bu makalede neleri öğreneceksiniz?
- JSON Nedir?
- C# ile JSON Verileri Oluşturmak
- C# ile JSON Verilerini Okumak
1. JSON Nedir?
Aslında JSON (Javascript Object Notation), JavaScript tarafından bize sunulmuş bir nimettir. Türkçesi ise Javascript Nesne Gösterimidir. Wikipediaya göreinsanlar tarafından okunabilen bir veri değişimi biçimidir denilse de,insanlar dediği kısım bence yazılım geliştiriciler içindir.
JSON bir ağaç yapısıyla çalışır ve XML mantığına benzerdir (kısmende benzer değildir). Ağaç yapısından ve kendisinin sunduğu özellikten dolayı, XMLden daha kolay ve daha hızlı işleyebilmekteyiz. Bağımsızdır, kısadır ve anlaşılabilir bir yapıdadır. XML ile karşılaştıracak olursak, benzerliğini göreceksiniz (Şekil 1).

Şekil 1
Yukarıda örnek göstermek amacıyla, Mersin Üniversitesine ait üç öğrencinin JSON ve XML türlerine göre bir örneği mevcuttur. Dikkatinizi çekerse JSON daha kısa ve daha anlamlıdır. Köşe parantezlerin [] birer dizi olduğunu, süslü parantezlerin {} ise {anahtar:değer} mantığı taşıdığını görebilirsiniz.
Peki JSON bize nerede işe yarayacak? Eğer sizin tarafınızdan oluşturulmamış ikinci bir kaynaktan veri alışverişinde bulunmak isterseniz, JSON hayat kurtarır nitelikte olacaktır. Örneğin Twitter APIsi kullanarak bir geliştirmek isterseniz karşınıza JSON çıkacaktır. Hatta pek çok sistem JSON veri paylaşımında bulunmaya başlamıştır. Googleda Free Json API yazarsanız, istemediğiniz kadar JSON ile karşılaşabilirsiniz.
Eğer XML ile uğraştıysanız, JSONın Key ve Value mantığı gibi bir durumunun olduğunu göreceksiniz. Nedir bu Keyleri ve Valueları, yukarıdaki örnekten yola çıkalım ve örnek JSON kodumuzu Şekil 2de verelim.

Şekil 2
universite bir anahtardır (Key), Mersin ise değeridir (yani Value).
ogrenciler bir anahtardır ve değeri aslında bir dizidir. Çünkü değer içerisinde birden çok veri vardır. İnceleyecek olursak bu diziyi, içerisinde üç adet isimdiye anahtarlar vardır. Bu anahtarların da aldığı değerler (Kurtay, Serdar, Şafak)vardır.
{nekadar:100 Lira} örneği de bir JSONdur. nekadar ifadesi anahtar iken100 Lira ise değeridir. Yani JSONun temel kalıbı {key:value} şeklindedir.
Temel bilgileri öğrendiğimize göre, gelelim en baba soru veya sorulara..
Bu JSONı nasıl oluşturacağız? Bunları tek tek Şekil 2deki gibi mi elimizle biz mi yazacağız?
El-cevap çok sevdiğim dostumun deyişi ile amelelik yapmaya gerek yok, vardır bir yolu..
2. C# ile JSON Verileri Oluşturmak
Öncelikle Visual Studioda bir Console uygulaması açalım. Solution Explorer üzerinden References kısmına sağ tıklayarak, JSON için ilgili kütüphaneyi kuralım (Şekil 3 ve Şekil 4).

Şekil 3

Şekil 4 JSON diye arayınız, Newtonsoft.Json seçiniz, Install ile kütüphaneyi kurunuz.
Şu ana kadar yaptıklarımızı toparlayacak olursak, JSON için temel bilgilerini öğrendik ve bunu kendi C# uygulamamız için temel kütüphanesi kurmayı gerçekleştirdik. Gelelim uygulama yazılımına. Her şeyden önce tabii ki kütüphanemizi kurduysak, JSON için gerekli using tanımını yapmak lazım. Kod bloğumuzun en üst kısmına gerekli tanımı yapıyoruz.
using Newtonsoft.Json;
Şekil 2deki JSON kod örneğini bizim yazılımımıza entegre etmek için öncelikle sınıflar ve Generic sınıflarla çalışacağız. Eğer hakkında bilgi sahibi değilseniz, Google amca buyurunuz.
Eğer C# uygulaması için yukarıdaki JSON örneğinin anahtarlarından (yani Key) bir class oluşturmakta zorlanıyorsanız, şu sitede otomatik class oluşturabilirsiniz C# için, buyurunuz. (Şekil 5 ve Şekil 6)
Örnek JSON Kodu
{
"universite":"Mersin",
"ogrenciler":[
{"isim":"Kurtay"},
{"isim":"Serdar"},
{"isim":"Şafak"}
]}

Şekil 5 JSON Kodunu yapıştırıp SUBMIT edelim.

Kendi kodumuzu kopyalarken kodda yer alan Example olan kısmı, kendi projemizde UniversiteOgrencileri olacak şekilde değişip yapıştırıyorum (Şekil 7).
Kod
public class Ogrenciler
{
public string isim { get; set; }
}
public class UniversiteOgrencileri
{
public string universite { get; set; }
public IList ogrenciler { get; set; }
}

Bu arada Şekil 7deki gibi using kısmını değiştirmeyi unutmayınız..
Sıra geldi ilgili Classı kullanarak yeni verileri JSON gibi oluşturmaya..
Generic class ile ilgili alanlara atamayı yaptıktan sonra aslında tek yapmamız gereken, JsonConvert.SerializeObject() metodu ile JSON oluşturmaktır. Gelsin kodlar..
UniversiteOgrencileri universiteOgrencileri = new UniversiteOgrencileri();
universiteOgrencileri.universite = "Koç";
List p = new List();
Ogrenciler ogrenci1 = new Ogrenciler{ isim = "Şafak" };
Ogrenciler ogrenci2 = new Ogrenciler{ isim = "Dilara" };
Ogrenciler ogrenci3 = new Ogrenciler{ isim = "Can" };
p.Add(ogrenci1);
p.Add(ogrenci2);
p.Add(ogrenci3);
universiteOgrencileri.ogrenciler = p;
string json = JsonConvert.SerializeObject(universiteOgrencileri);
System.Console.WriteLine(json);
Çıktıyı görelim (Şekil 8).

Oluşturma işlemimiz başarılı! Format biçimini beğenmedi iseniz, Google amca sayesinde bunu biçimsel hale getirebilirsiniz, buyurunuz. (Şekil 9)

3. C# ile JSON Verilerini Okutmak
Bence en basiti burası. Eğer JSONdan elde ettiğiniz bir veri varsa, bunu aktarmayı tek kod ile gerçekleştirebilirsiniz. Hele Classınızda JSONa uygunsa, tek kodunuz sizi bekliyordur.
İşimizi zorlaştıralım ve bir örnek senaryo düşünelim. Diyelim ki www.xyzuniversitesi.com/ornek.json adresinden bir üniversiteye ait öğrencilerin bilgilerini okumaya yarayan bir uygulama yazacaksınız.
İlgili öğrenci bilgileri de Şekil 9daki gibi olsun.

İhtiyacımız olan ilk şey JSONdan gelecek veridir. Çünkü öğrenci verileri burada tutulmaktadır. Bize de veriler lazımdır. Algoritma şeklinde düşünürsek ilk ilgili siteye talep oluşturmamız, ardından talep sonucu elde ettiğimiz değeri bir değişkene aktarmamız gerekmektedir. Aşağıdaki kod ile ilgili siteye JSON verisini elde etmek için talep oluşturalım, ardından elde ettiği verileri jsonVerisiadlı değişkene aktaralım.
string url = "<a href="http://www.eniskurtayyilmaz.com/ornek.json" target="_blank">www.xyzuniversitesi.com/ornek.json</a>";
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
string jsonVerisi = "";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
StreamReader reader = new StreamReader(response.GetResponseStream());
//jsonVerisi adlı değişkene elde ettiği veriyi atıyoruz.
jsonVerisi = reader.ReadToEnd();
}
Bunu yazdıktan sonra aman ha, using System.IO; ve using System.Net; tanımlarını yapmayı unutmayalım!
Neyse.. İlgili JSON için Class ve Generic class oluşturmayı öğrenmiştik yukarıda bir yerlerde. Dikkat ederseniz aynı anahtar (Key) üzerinden çalışmaktayım, sadece değerler (Value) farklıdır. Bu yüzden ilgili Classı silmemize gerek kalmayacak şimdilik bu uygulamada. Eğer siz başka bir çalışma yapıyorsanız, siz kendiniz bayağı yukarıda bahsettiğim gibi otomatik oluşturabilecek sitelerden faydalanarak bu işlemi yapabilirsiniz.
İlgili JSONdaki verileri kendi uygulamamızdaki Classa aktarıp, bundan sonra istediğimizi yaptırabiliriz. Dedim ya tek kod, buyurunuz.
UniversiteOgrencileri universiteOgrencileri = JsonConvert.DeserializeObject(jsonVerisi);
Yukarıda universiteOgrencileri adlı UniversiteOgrencileri türü olan Classa, DeserializeObject() Metodu ile ederek elde ettiğimiz verilerin hepsini düzenli olarak işledik. Tabi burada önceden bu hiyerarşiye uygun oluşturduğumuz Class önemli olan.
E hadi bir sonraki makalede görüşmek dileğiyle.
Bu makalede yer alan tüm kodlar için : https://github.com/eniskurtayyilmaz/csJsonKullanimi
Enis Kurtay YILMAZ