Merhaba arkadaşlar. Bu yazımda çokça mail aldığım bir konunun başka bir örneğinden bahsedeceğim. Json veri çekmek. Json veri çekmenin ne kadar önemli olduğunu ya da niye Json veri çekmemizin ihtiyaç olduğundan bu yazımda bahsetmeyeceğim. Daha önce ki yazıma buradan ulaşabilirsiniz.
Bir arkadaşımız URL paylaşarak burada ki verilerden örnek alarak yapabilir misiniz diye rica etti. Bende bu URL’den örnek olarak yapacağım.
URL’e gidiyoruz ve buradaki tüm verileri bu adrese yapıştırıyoruz. Bu adres, bizim json verilerimizi bir modele dönüştürüyor. Bu modeli de projemize dahil ediyoruz.
using System; namespace XamTakeJson.Model { public class SampleModel { public string id { get; set; } public string baslik { get; set; } public string detay { get; set; } public object ustu { get; set; } public string url { get; set; } public object gruplar { get; set; } public string resim { get; set; } public string dil { get; set; } } }
Sonrasında ise URL’den verileri çekip, projemizde ki modele dönüştürmemiz gerekiyor. Tabi bunun için bir de servis yazmamız lazım. Serviste kullanmamız için Newtonsoft.Json paketini kurmalıyız. Servisin içinde ilk olarak URL’imizi belirtmemiz gerekiyor. Url’i belirttikten sonra bir HttpClient oluşturmalıyız. Biz bu client ile bir Url’den verileri çekebiliriz. Tabi json verileri çekeceğimiz için bunu oluşturduğumuz client’e söylememiz gerekiyor. Ardından verileri çekme fonksiyonunu yazmamız kalıyor sadece. Benim bu fonksiyonum geriye liste şeklinde gelen modellerimi döndürmeli ve Url’den verileri de çekeceğimiz için asenkron bir yapıda olmalı. Ardından işlemleri yapmaya başlayabiliriz. Oluşturduğumuz Client’e belirttiğimiz adreste ki verileri string olarak oku demeliyiz. Yani Url’de bulunan her şeyi bana string olarak getir diyoruz ve bunu bir result adlı değişkene atıyorum. Sonrasında ise yüklemiş olduğum Newtonsoft.Json paketimin yardımıyla deserialize yaparak liste şeklinde modellerime dönüştürüyorum. Aslında olayımız bu kadar basit.
using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; using Newtonsoft.Json; namespace XamTakeJson.Providers { public class ServiceManager { private static string Url = ""; private HttpClient GetClient() { HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Add("Accept", "application/json"); return client; } public async Task<List<Model.SampleModel>> Get() { using (HttpClient client = GetClient()) { var result = await client.GetStringAsync(Url); return JsonConvert.DeserializeObject<List<Model.SampleModel>>(result); } } } }
Servisi yazdıktan sonra artık geriye sadece bunu kullanmamız gerekiyor. Ben bir Xamarin projesinde kullanıyorum. Zaten buraya kadar olan her şey ortak. Bu yüzden tüm projelerinizde kullanabilirsiniz. Servis çağırımı içinde bir ServiceManager oluşturuyorsunuz ardından bu manager ile oluşturmuş olduğum fonksiyonu çağırarak bir değişkene atıyorum.
ServiceManager manager = new ServiceManager(); var takenData = manager.Get();
Sonrasında gelen verilerime baktığımda 22 adet olduğunu görüyorum.
Listenin içerisinde herhangi bir objeyi incelediğimde verilerin doğru bir şekilde geldiğini görüyorum.
Sorularınız olursa mail veya yorum atarak ulaşabilirsiniz. İyi çalışmalar.
Bir yanıt yazın