ASP.NET(C#) ile JSON işlemleri (Web Form)
Merhaba arkadaşlar,
Bu yazımda ASP.NET (Web Form) ile JSON işlemlerini ele alacağız . Öncelikle belirtmeliyimki temel seviyede C#, ASP.NET bilgilerinizin olduğunu var sayıyorum yani constructor , list<>, diziler , foreach vs şeyleri bilmiyorsanız anlamanız biraz zor olur.
JSON işlemleri için hazırlanmış olan Newtonsoft.Json kütüphanesinden faydalanacağız aşağıdaki linkten indirebilirsiniz.
https://yadi.sk/d/4AhzzagNrWsrc
Yaptığımız örneği aşağıdaki linkten inceleyebilirsiniz;
http://mustafa.zenbil.com/json/
Önce classlar ile JSON verimizi oluşturup daha sonra ayrıştırma işlemini yapacağız. Oluşturacağımız JSON verisinin yapısına aşağıdan bakabilirsiniz.Yapacağımız örnek sayesinde basitçe kendiniz için bi servis oluşturabilir yada ASP.NET veya c# kullanarak bir apiden çektiğiniz json verisini ayıklayabilirsiniz.
Üye Adı
Üye Epostası
İzlediği Filmler
—Film Adı
—Film Türü
—Film Yorumları
—— Adı Soyadı
—— Yorumu
Yukarıdaki ağaç yapısında bir JSON oluşturmak için 3 adet class oluşturmamız lazım yani alt elemanı olan her eleman için bir class oluşturuyoruz
uyeler , izledigiFilmler ve filmYorumları Adında 3 tane class oluşturuyoruz ve alacağı değişkenleri classlara tanımlıyoruz
using Newtonsoft.Json;
//yazarak kullanacağımız kütüphaneyi projemize dahil ediyoruz
uyeler Classı
public class uyeler
{
public uyeler(string _uyeAdi, string _memleketi, string _epostasi,izledigiFilmler[] _izledigiFilmler)
{
//Constructor ile değişkenlere değerlerimizi atıyoruz.
uyeAdi = _uyeAdi;
memleketi = _memleketi;
epostasi = _epostasi;
izledigiFilmlerx = _izledigiFilmler;
}
public string uyeAdi { get; set; }
public string memleketi { get; set; }
public string epostasi { get; set; }
public izledigiFilmler[] izledigiFilmlerx { get; set; }
//Üyenin izlediği filmler 1 den çok olabileceği için izledigiFilmler classını dizi şeklinde tutuyoruz
//İstersek dizi yerine liste olarakta tutabiliriz.
}
izledigiFilmler Classı
public class izledigiFilmler
{
public izledigiFilmler(string _filmAdi, string _filmTuru)
{
//constructor ile değişkenlere değerlerimizi atıyoruz
filmAdi = _filmAdi;
filmTuru = _filmTuru;
yorumlarx = new yorumlar[]
{
new yorumlar("Mustafa","Yorum1"),
new yorumlar("Fatih","Yorum2"),
new yorumlar("Ali","Yorum3"),
new yorumlar("Ziya","Yorum4")
};
//Az önce uyeler classını tanımlarken izlediğiFilmleri dizi şeklinde tutmuştuk_
//ve constructor ile dışarıdan gelen diziye eşitlemiştik
//burda ise yorumlar birden çok olabilceği için yine aynı şekilde dizi olarak tanımladık
//Ancak örnek uzamasın diye dışarıdan dizi şeklinde yorum almadık yorumları kendimiz yazdık.
//Yani her eklenen filmin yorumları otomatik yukarıdaki gibi olacak.
}
public string filmAdi { get; set;}
public string filmTuru { get; set;}
public yorumlar[] yorumlarx { get; set; }
//birden çok yorum olabilceği için yorumları dizi olarak tanımladık.
}
Yorum Classı
public class yorumlar
{
//yorum ağacın en sonu olduğu için yani bi alt dala ayrılmadığı için
//yukarıdaki classlardaki gibi dizi türünde bir özellik tutmadık
public yorumlar(string _uyeAdi,string _yorum)
{
//constructor ile gelen bilgilerimizi değişkene atadık
uyeAdi = _uyeAdi;
yorum = _yorum;
}
public string uyeAdi { get; set; }
public string yorum { get; set; }
}
Bilgileri Girdiğimiz Metod
//geriye uyeler listesi döndüren bilgiler metodunu tanımlıyoruz
public List bilgiler()
{
List uyeListe = new List()
{
//uyeler türünde yeni bir liste oluşturduk
new uyeler("Mustafa Zenbil","Trabzon","mustafa@zenbil.com",new izledigiFilmler[]
{
//new uyeler diyerek yeni bir üye oluşturuyor ve uyeler classının constructorına bilgileri yolluyoruz ve
//uyeler constructorının son aldığı değer izlediğiFilmler türünden bir dizi olduğu için
//son virgülden sonra new izledigiFilmler[] diyerek yeni bir dizi oluşturuyoruz ve
// dizinin içini aşağıdaki bilgiler ile doldurmaya başlıyoruz
new izledigiFilmler("Batman vs Süperman","Bilim Kurgu"),
new izledigiFilmler("Tom ve Jerry","Animasyon")
//izlediğiFilmler classının constructorına film adı ve kategori bilgilerini gönderiyoruz.
//2 tane izlediği filmi ekledik ve aşağıdada aynı işlemleri farkı üyeler ekleyip listeyi dolduruyoruz.
}),
new uyeler("Ali Bulut","Bursa","ali27001@gmail.com",new izledigiFilmler[]
{
new izledigiFilmler("Revenant","Dram"),
new izledigiFilmler("Gece ve Gündüz","Aksiyon"),
new izledigiFilmler("Oflu Hoca","Komedi")
}),
new uyeler("Ziya İstanbullu","Sinop","ziyaistanbullu@hotmail.com",new izledigiFilmler[]
{
new izledigiFilmler("Yüzüklerin Efendisi","Bilim Kurgu / Fantastik")
}),
new uyeler("Fatih Tüzen","Gümüşhane","fatihtuzen@gmail.com",new izledigiFilmler[]
{
new izledigiFilmler("Kurtlar Vadisi Gladio","Aksiyon"),
new izledigiFilmler("Kolpaçino","Komedi"),
new izledigiFilmler("Aman Tanrım","Komedi")
})
};
//liste burda bitiyor
return uyeListe;
//listemizi geri döndürüyoruz.
}
Page Load Metodu ile Ekrana Yazdırma
protected void Page_Load(object sender, EventArgs e)
{
string json = JsonConvert.SerializeObject(bilgiler());
//Kullandığımız Newstonsoft.JSON kütüphanesinin convert metodundan yararlanarak geriye liste döndüren
// bilgiler metodunu çalıştırıp döndürdüğü listeyi convert edip stringimize atadık
Response.Write(json);
//json verimizi ekrana yazdırdık . Şimdi ise bu json verisini ayıklama işlemini yapacağız
dynamic dinamik = JsonConvert.DeserializeObject(json);
//Tekrardan Newstonsoft.JSON kütüphanesinin metodundan yararlanarak json veriyi dönüştürerek
//dynamic türündeki değişkene atadık. String, var, object türlerine atarsak çalışmaz dynamic olması gerek.
foreach (var gelen in dinamik)
{
Response.Write("Ayıklanmış Hali
");
Response.Write("
Üye Adı : " + gelen.uyeAdi + "
");
//gelen. dan sonraki kısım jsondaki veriyi tutan kısımla aynı olmak zorunda yoksa çalışmaz.
//yani uyeler classındaki uyeAdi değişken ismiyle çağırıyoruz
//uyeler kısmındaki uyeAdi değilde adSoyad olsa idi gelen.adSoyad ile üyenin adını alıcaktık.
Response.Write("Üye Epostasi : " + gelen.epostasi + "
");
Response.Write("Memleketi : " + gelen.memleketi + "
");
Response.Write("" + gelen.uyeAdi + "'nın izlediği Filmler ;
");
foreach (var gelenfilm in gelen.izledigiFilmlerx)
{
//üyenin izlediği filmler dizi türünde olduğu için iç içe foreach kullandık
Response.Write("----------------------------------------------------");
Response.Write("**** Film Adı:" + gelenfilm.filmAdi + "
");
Response.Write("**** Film Türü:" + gelenfilm.filmTuru + "
");
Response.Write("" + gelenfilm.filmAdi + " Yorumları ;
");
foreach (var yorum in gelenfilm.yorumlarx)
{
//filmlerin yorumları dizi olduğu için tekrardan iç içe foreach kullandık
Response.Write("----------- Üye Adı: " + yorum.uyeAdi + "
");
Response.Write("----------- Yorum: " + yorum.yorum + "
");
}
}
Response.Write("");
//son olarakta divimizi kapattık
}