Share via


Düşünceler ion ile kaynak oluşturma karşılaştırmasıSystem.Text.Json

Bu makalede, serileştirmeyle ilgili olarak yansıma ve kaynak oluşturma arasındaki farklar System.Text.Json açıklanmaktadır. Ayrıca senaryonuz için en iyi yaklaşımı seçme konusunda rehberlik sağlar.

Meta veri koleksiyonu

Bir türü seri hale getirmek veya seri durumdan çıkarmak için, JsonSerializer türün üyelerine erişme hakkında bilgi gerekir. JsonSerializer aşağıdaki bilgilere ihtiyaç duyar:

  • Serileştirme için özellik alıcılarına ve alanlarına erişme.
  • Seri durumdan çıkarma için bir oluşturucuya, özellik ayarlayıcılarına ve alanlara erişme.
  • Serileştirmeyi veya seri durumdan kaldırmayı özelleştirmek için kullanılan öznitelikler hakkında bilgi.
  • 'den JsonSerializerOptionsçalışma zamanı yapılandırması.

Bu bilgiler meta veri olarak adlandırılır.

Yansıma

Varsayılan olarak, JsonSerializer yansıma kullanarak çalışma zamanında meta verileri toplar. Bir JsonSerializer türü ilk kez seri hale getirmesi veya seri durumdan çıkarması gerektiğinde, bu meta verileri toplar ve önbelleğe alır. Meta veri toplama işlemi zaman alır ve belleği kullanır.

Kaynak oluşturma

Alternatif olarak, performansı geliştirmek, System.Text.Json özel bellek kullanımını azaltmak ve uygulama boyutunu azaltan derleme kırpmayı kolaylaştırmak için C# kaynak oluşturma özelliğini kullanabilir. Ayrıca, bazı yansıma API'leri Yerel AOT uygulamalarında kullanılamaz, bu nedenle bu uygulamalar için kaynak oluşturmayı kullanmanız gerekir.

Kaynak oluşturma iki modda kullanılabilir:

  • Meta veri tabanlı mod

    Derleme sırasında, System.Text.Json serileştirme için gereken bilgileri toplar ve istenen türler için JSON sözleşme meta verilerini dolduran kaynak kod dosyaları oluşturur.

  • Serileştirme-iyileştirme (hızlı yol) modu

    JsonSerializer adlandırma ilkeleri ve başvuru koruması gibi serileştirme çıkışını özelleştiren özellikler bir performans yükü taşır. Serileştirme-iyileştirme modunda, System.Text.Json doğrudan kullanan Utf8JsonWriter iyileştirilmiş serileştirme kodu oluşturur. Bu iyileştirilmiş veya hızlı yol kodu serileştirme aktarım hızını artırır.

    Hızlı yol seri durumdan çıkarma şu anda kullanılamıyor. Daha fazla bilgi için bkz . dotnet/runtime issue 55043.

için kaynak oluşturma için System.Text.Json C# 9.0 veya sonraki bir sürüm gerekir.

Özellik karşılaştırması

Her birinin sunduğu aşağıdaki avantajlara göre yansıma veya kaynak oluşturma modlarını seçin:

Avantaj Yansıma Kaynak oluşturma
(Meta veri tabanlı mod)
Kaynak oluşturma
(Serileştirme-iyileştirme modu)
Kod daha basit. ✔️
Hata ayıklamak daha kolay. ✔️ ✔️
Genel olmayan üyeleri destekler. ✔️ ✔️* ✔️*
Kullanılabilir tüm serileştirme özelleştirmelerini destekler. ✔️
Başlangıç süresini azaltır. ✔️ ✔️
Özel bellek kullanımını azaltır. ✔️ ✔️
Çalışma zamanı yansımasını ortadan kaldırır. ✔️ ✔️
Kırpma güvenli uygulama boyutunun azaltılmasını kolaylaştırır. ✔️ ✔️
Serileştirme aktarım hızını artırır. ✔️

* Kaynak oluşturucu, aynı derlemedeki iç türler gibi genel olmayan bazı üyeleri destekler. † Kaynak tarafından oluşturulan sözleşmeler, sözleşme özelleştirme API'si kullanılarak değiştirilebilir.

Avantaj Yansıma Kaynak oluşturma
(Meta veri tabanlı mod)
Kaynak oluşturma
(Serileştirme-iyileştirme modu)
Kod daha basit. ✔️
Hata ayıklamak daha kolay. ✔️
Genel olmayan erişimcileri destekler. ✔️
Gerekli özellikleri destekler. ✔️
Yalnızca başlatma özelliklerini destekler. ✔️
Başlangıç süresini azaltır. ✔️ ✔️
Özel bellek kullanımını azaltır. ✔️ ✔️
Çalışma zamanı yansımasını ortadan kaldırır. ✔️ ✔️
Kırpma güvenli uygulama boyutunun azaltılmasını kolaylaştırır. ✔️ ✔️
Serileştirme aktarım hızını artırır. ✔️