System.Text.Json Keşif Serisi #1

Erkan Güzelküçük
Devbase
Published in
3 min readOct 29, 2020

Microsoft Newtonsoft.Json kütüphanesini hem kullandı hem de developer’lara tavsiye etti. .Net Core 3.0 ile beraber artık Newtonsoft.Json bağımlılığından kurtularak System.Text.Json namespace’ini duyurdu. Newtonsoft.Json kullanarak Json işlemlerini çok kolay yapabiliyorduk. Yıllarca aşina olduk da diyebiliriz. Projelerinizi UpGrade etmek istediğinizde bir çok sorunla karşılaşabilirsiniz. Newtonsoft.Json’ın desteklediği bazı özellikler System.Text.Json tarafından desteklenmiyor.

Bu fotoğraf Marc A tarafından çekilmiştir.

Microsoft, System.Text.Json konusunda developer’ları zorlamıyor. Newtonsoft.Json kütüphanesini kullanmaya devam edebilmemiz için halen destek veriyor. Fakat System.Text.Json kullanılmasını ve comminity bazında geliştirilmesini tavsiye ediyor.

System.Text.Json’a geçiş sıkıntılı olabilir şu süreçte. Bunun nedeni çok yeni ve halen geliştiriliyor olması. Bir çok yenilikler gelebilir, varolan metodlarda değişikliğe gidilebilir. Newtonsoft.Json eski ve kendini kanıtlamış bir kütüphane, bazı özellikleri System.Text.Json’da bulamayabilirsiniz. Microsoft bu konuda Geçici Çözümler sunabiliyor. Uygulamalarınızı UpGrade ederken Microsoft’un paylaşmış olduğu dökümanı incelemenizde fayda görüyorum.

https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-migrate-from-newtonsoft-how-to

Newtonsoft.Json Kullanımına Nasıl Devam Edersiniz?

Microsoft.AspNetCore.Mvc.NewtonsoftJson namespace’ini kullanarak projenize devam edebilirsiniz. Bunun için Startup’ta yapmanız gereken ufak bir configuration bulunmakta.

System.Text.Json Deserialization’a Genel Bakış

Json’ı System.Text.Json ile çalışmanın 3 farklı yaklaşımı bulunuyor. Her yaklaşım verileri farklı bir şekilde ortaya çıkarıyor. Tabii ki bu ne yapmak istediğinizle alakalı olarak değişebilir.

JsonSerializer

Genel tanımıyla, Newtonsoft.Json’da JsonConvert’a karşılık gelmektedir. Memory’i verimli şekilde kullanmak için bazı OverLoad’lar bulunmaktadır.

Newtonsoft.Json ile Request.Body Deserialize için öncelikle StreamReader’dan geçmesi gerekiyor[1. ve 2. Satır]. System.Text.Json ile bunu tek bir satırda halledebilirsiniz[5. Satır].

Hangi durumlarda JsonSerializer kullanılabilir

  • Json belgesinin küçük ve orta ölçekli POCO ile tam uyumlu serileştirmelere uygun olduğu durumlarda.
  • Json belgesindeki tüm özellikleri ve değerleri uygulama tarafında kullanılabilir olduğu durumlarda.

JsonDocument

Json’ı ayrıştırarak incelemek için kullanılmaktadır. Sizi bir POCO tanımlamaya zorlamadan Json okumanıza olanak verir.

JsonDocument, JsonProperty, JsonElement

JsonElement’i document.RootElement.GetString(“Topic”) ve ya document.RootElement.GetNumber(“Part”) metodları ile kullanabilirsiniz.

GetProperty ile bir Json bloğu alabilirsiniz. Örnek Stats Property’sini Element’leri ile beraber blok şeklinde almak için document.RootElement.GetProperty(“Stats”) kullanabilirsiniz.

JsonDocument ile istediğiniz veriye ulaşmanın iki yolu bulunmaktadır. Birincisi ne aradığınızı biliyorsanız öğeye doğrudan DOM üzerinden erişmeniz olacaktır.

Bu şekilde GetProperty yardımıyla performanslı sonuçlar elde edebilirsiniz. İkincisi ise dökümanın herhangi bir bloğunda bulunan bir kısma erişmek istiyorsunuz fakat rota’yı bilmiyorsunuz. İşte bu noktadaEnumerateObjectve EnumerateArray kullanılabilir.

Hangi durumlarda JsonDocument kullanılabilir

  • Json belgesi bir POCO ile temsil edilemeyecek kadar karmaşık olduğu durumlarda.
  • Json belgesinde sadece bir kaç bloğu kullanmak istediğiniz durumlarda.

Utf8JsonReader

Bellek kullanımını minimumda tutarken her JSON Token ile ne yapacağınıza karar vermenize olanak tanıyan “FullControl” bir Metodtur.

Hangi durumlarda Utf8JsonReader kullanılabilir

  • Başka bir şekilde okunması mümkün olmayan çok büyük Json belgeleri için kullanılabilir bir yöntemdir.

--

--

Erkan Güzelküçük
Devbase

Software Architecture and Research Applications Development Team Leader at Koç University