.Net 5: System.Net.Http.Json Keşif Serisi #2
.Net 5 ilginç yeni özelliklerle karşımıza çıkıyor. System.Net.Http namespace’i hepimiz biliyoruz, System.Net.Http.Json ne yapıyor peki?
Microsoft Documents sayfasında System.Net.Http.Json namespace’i için;
Provides extension methods for HttpClient and HttpContent that perform automatic serialization and deserialization using System.Text.Json.
Kısacası bu namespace System.Text.Json kullanarak otomatik serialization ve deserialization işlemi yaparak HttpClient ve HttpContent için bazı metodlar kullanıma sunar.
Microsoft, .Net 5 ile System.Text.Json için büyük yatırım yapıyor diyebilirim. Kalıcı bir özellik bunlar çünkü. Bir sonraki versiyonlarda bu özellikleri kaldırıyorum gibi şeyler duyacağımızı sanmıyorum.
System.Net.Http.Json’ın üç sınıfı bulunmakta. Bunları adım adım inceleyelim.
- HttpClientJsonExtensions
- HttpContentJsonExtensions
- JsonContent
HttpClientJsonExtensions
Http içeriğini Json olarak göndermek veya almak için bazı metodlar üretiyor. Bu metodların tamamı Async. Bu metodlar; GetFromJsonAsync, PostAsJsonAsync ve PutAsJsonAsync.
GetFromJsonAsync
Bu metod ile belirtilen Uri’ye GET isteği gönderiliyor ve yanıt gövdesi Json olarak deserialize edilmiş olarak alınıyor.
PostAsJsonAsync
İsminden de anlaşılacağı üzere belirlediğiniz bir Uri’e Modelinizi herhangi bir serialize işlemine tabi tutmadan bu metod yardımıyla Post edebiliyorsunuz.
PutAsJsonAsync
PostAsJsonAsync ile kullanımı aynı şekildedir. Sadece Put yöntemi ile istek sağlıyor.
HttpContentJsonExtensions
Bu sınıf sadece bir metod içeriyor ve iki overloads’a sahip. ReadFromJsonAsync ve ReadFromJsonAsync<T>
ReadFromJsonAsync
Bu metod HTTP içeriğini okur ve içeriği Json olarak gelen gövdeyi Deserialize eder.
Eğer HttpClientJsonExtensions sınıfını kullanmayı tercih etmezseniz bu metod’u kullanmanız gerekir. GetFromJsonAsync ve ReadFromJsonAsync aynı şeyi yapıyor temelde aslında fakat ReadFromJsonAsync yönteminin HttpContent üzerinde geçerli olduğunu unutmamak gerekiyor.
JsonContent
Bu sınıf Json’a dayalı Http içeriği sağlar. JsonContent’i incelediğimizde HttpContent’ten türediğini görebiliriz.
public sealed class JsonContent : HttpContent
HttpContent’e ait tüm metodlar’ı JsonContent’te kullanabiliyor. Kendine ait sadece Create metodu mevcut. Anlık olarak bir Json isteği oluştuğunda bu sınıfı kullanabilirsiniz. En basit örneği SendAsync metodu için.
PatchAsJsonAsync gibi bir metod ile karşılaşmadım. Neden eklemediler bunu anlamadım! JsonContent bu eksik metod yerine tercih edilebilir.
.Net 5 gün geçtikçe farklı namespace’ler ile çıkabiliyor karşımıza. Bakalım bir sonraki keşfimiz hangi yeni namespace’e olacak :)