.Net Core 3+ JSON serializer

Erkan Güzelküçük
Devbase
Published in
2 min readApr 27, 2020

Microsoft, .Net Core 3.0 ile birlikte System.Text.Json isminde yeni bir namespace yayınladı. .Net Core ile entegre olduğu için serializer işlemlerinde extra bir nuget package yüklemenize gerek kalmıyor. Peki Newtonsoft.json alışkanlıklarımız ne olacak? :)

Ham Kris’in albümünden alınan bir fotoğraftır.

Microsoft, System.Text.Json için birincil hedefin performans olduğundan bahsediyor. Fakat yine de kullanırken projenize en uyumlu olanı seçmeniz için analiz etmenizi de öneriyor. Newtonsoft.json’ın bir çok özelliğinin mevcut olması ve bu özelliklerin System.Text.Json’da olmaması da göz önüne alınmalı.

Performans

System.Text.Json’ın Json işlemlerinde genellikle kullanılan Newtonsoft.Json’a göre daha performanslı olduğunu farkettim. 112KB’lık bir işlem için test yapıldığında. Newtonsoft.json 3485 RPS iken, System.Text.Json 7319 RPS veriyor. 2x hızlanma demek oluyor bu da.

Yine aynı test için CPU ve Memory tüketimini kontrol ettiğimizde Newtonsoft.json 85% iken System.Text.Json 98% oranlarında geziniyor. Memory tarafına baktığımızda Newtonsoft.json 230MB iken System.Text.Json 189MB. Memory yönetimi konusunda System.Text.Json önde gidiyor.

Newtonsoft.json ve System.Text.Json Özellik Farklılıkları

Newtonsoft.json’da olup da System.Text.Json’ın desteklemediği bazı özellikler mevcut bunlar için şuan geçici bir çözüm bulunmamaktadır. İlerleyen zamanlarda System.Text.Json yeni sürümleri içerisinde yer verebilir diye düşünüyorum.

  • PreserveReferencesHandling
  • ReferenceLoopHandling
  • MissingMemberHandling
  • Öznitelikler için System.Runtime.Serialization
  • Tırnak işaretleri olmadan özellik adlarına izin verme
  • Dize değerlerinin çevresinde tek tırnak işaretlerine izin verme
  • Dize özellikleri için dize olmayan JSON değerlerine izin verme

Sonuç

Hemen olmasa bile çok yakında Newtonsoft.json artık yeni projelerde yer almayacak gibi görünüyor. Bana göre performans açısından biraz hantal kaldı Newtonsoft.json. System.Text.Json ilerleyen zamanlarda ne gibi yenilikler getirecek onu da göreceğiz.

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

--

--

Erkan Güzelküçük
Devbase

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