Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kaynak oluşturma iki modda kullanılabilir: meta veri tabanlı ve serileştirme iyileştirme. Bu makalede farklı modlar açıklanmaktadır.
Kaynak oluşturma modlarını kullanma hakkında bilgi için bkz . 'de System.Text.Jsonkaynak oluşturmayı kullanma.
Meta veri tabanlı mod
Meta veri toplama işlemini çalışma zamanından derleme zamanına taşımak için kaynak oluşturmayı kullanabilirsiniz. Derleme sırasında meta veriler toplanır ve kaynak kod dosyaları oluşturulur. Oluşturulan kaynak kodu dosyaları otomatik olarak uygulamanın ayrılmaz bir parçası olarak derlenir. Bu teknik, hem seri hale getirme hem de seri durumdan çıkarma performansını geliştiren çalışma zamanı meta veri koleksiyonunu ortadan kaldırır.
Kaynak oluşturma tarafından sağlanan performans iyileştirmeleri önemli olabilir. Örneğin, test sonuçları %40'a kadar veya daha fazla başlatma süresi azaltma, özel bellek azaltma, aktarım hızı artışı (serileştirme iyileştirme modunda) ve uygulama boyutunu azaltma göstermiştir.
Bilinen sorunlar
Serileştirme modunda (yansıma veya kaynak oluşturma) varsayılan olarak yalnızca public
özellikler ve alanlar desteklenir. Ancak yansıma modu üyelerin private
kullanımını desteklerken kaynak oluşturma modu desteklemez. Örneğin, JsonInclude özniteliğini, yansıma modunda seri hale getirilir. Kaynak oluşturma modu yalnızca public
özelliklerin internal
üyelerini ve public
veya internal
erişimcilerini public
destekler. Üyeleri veya erişimcileri ayarlar [JsonInclude]
private
ve kaynak oluşturma modunu seçerseniz, çalışma zamanında bir NotSupportedException
oluşturulur.
Kaynak oluşturmayla ilgili diğer bilinen sorunlar hakkında bilgi için dotnet/runtime deposundaki "source-generator" etiketli GitHub sorunlarına bakın.
Serileştirme-iyileştirme (hızlı yol) modu
JsonSerializer
adlandırma ilkeleri ve başvuruları koruma gibi serileştirme çıkışını özelleştiren birçok özelliğe sahiptir. Tüm bu özellikler için destek, bazı performans ek yüklerine neden olur. Kaynak oluşturma, doğrudan kullanan Utf8JsonWriter
iyileştirilmiş kod oluşturarak serileştirme performansını geliştirebilir.
Serileştirme-iyileştirme modu hızlı yol serileştirme yöntemlerini yayar ancak serileştirme meta verilerini yaymaz. Hızlı yol serileştirmesi yapabilecekleri ile sınırlıdır; zaman uyumsuz serileştirmeyi veya herhangi bir çözme işlem modunu desteklemez.
Ayrıca iyileştirilmiş kod, JsonSerializer
tarafından desteklenen tüm serileştirme özelliklerini desteklemez. Seri hale getirici, iyileştirilmiş kodun kullanılıp kullanılamayacağını algılar ve desteklenmeyen seçenekler belirtilirse varsayılan serileştirme koduna geri döner. Örneğin, JsonNumberHandling.AllowReadingFromString yazma için geçerli değildir, bu nedenle bu seçeneğin belirtilmesi varsayılan koda geri dönüşe neden olmaz.
Aşağıdaki tabloda, hızlı yol serileştirme tarafından hangi seçeneklerin JsonSerializerOptions
desteklendiği gösterilmektedir:
Seri hale getirme seçeneği | Hızlı yol için desteklenir |
---|---|
AllowTrailingCommas | ✔️ |
Converters | ❌ |
DefaultBufferSize | ✔️ |
DefaultIgnoreCondition | ✔️ |
DictionaryKeyPolicy | ❌ |
Encoder | ❌ |
IgnoreNullValues | ❌ |
IgnoreReadOnlyFields | ✔️ |
IgnoreReadOnlyProperties | ✔️ |
IncludeFields | ✔️ |
MaxDepth | ✔️ |
NumberHandling | ❌ |
PropertyNamingPolicy | ✔️ |
ReferenceHandler | ❌ |
TypeInfoResolver | ✔️ |
WriteIndented | ✔️ |
(Aşağıdaki seçenekler yalnızca serileştirmeyi kaldırmaya uygulandığından
Aşağıdaki tabloda, hangi özniteliklerin hızlı yol serileştirme tarafından desteklendiği gösterilmektedir:
Öznitelik | Hızlı yol için desteklenir |
---|---|
JsonConstructorAttribute | ❌ |
JsonConverterAttribute | ❌ |
JsonDerivedTypeAttribute | ✔️ |
JsonExtensionDataAttribute | ❌ |
JsonIgnoreAttribute | ✔️ |
JsonIncludeAttribute | ✔️ |
JsonNumberHandlingAttribute | ❌ |
JsonPolymorphicAttribute | ✔️ |
JsonPropertyNameAttribute | ✔️ |
JsonPropertyOrderAttribute | ✔️ |
JsonRequiredAttribute | ✔️ |
Bir tür için desteklenmeyen bir seçenek veya öznitelik belirtilirse, kaynak oluşturucunun meta veri oluşturmak üzere yapılandırıldığı varsayılarak seri hale getirici meta veri moduna geri döner. Bu durumda, iyileştirilmiş kod bu tür serileştirilirken kullanılmaz, ancak diğer türler için kullanılabilir. Bu nedenle, serileştirme-iyileştirme modundan ne kadar avantaj elde edebilirsiniz belirlemek için seçeneklerinizle ve iş yüklerinizle performans testi yapmanız önemlidir. Ayrıca koda geri dönebilmek için JsonSerializer
meta veri modu gerekir. Yalnızca serileştirme-iyileştirme modunu seçerseniz, koda JsonSerializer
geri dönmesi gereken türler veya seçenekler için serileştirme başarısız olabilir.