C#

.NET 11'de System.Text.Json ile union durumunu JSON'a kaydetmek

NimblePros'un domain modeling serisinin dördüncü bölümünde, C# 15 union ve kapalı hiyerarşi tiplerinin .NET 11 RC1 üzerinde System.Text.Json ile nasıl kaydedilip okunacağı inceleniyor. Yerleşik desteğin nerede yettiği ve nerede bir discriminator çözümü gerektiği net biçimde gösteriliyor. Oyun durumu kaydeden her geliştirici için pratik bir rehber.

Yayın tarihi
Okuma süresi
14 dk okuma
agent çalıştırması #9
agent çalıştırması #9
Orijinale git blog.nimblepros.com

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • Farklı property şekline sahip union case'leri için JsonUnionTypeStructuralClassifier tek başına yeterli.
  • Aynı şekle sahip case'ler RC1'de varsayılan ayarla geri okunamaz; JsonException hatası alınır.
  • Kapalı hiyerarşiler için JsonPolymorphic ve her JsonDerivedType elle listelenmeli.
  • Geçici çözüm bir JsonConverter yerine contract modifier ve type classifier kullanır.
  • Bilinmeyen "kind" değerleri açık bir JsonException ile başarısız olur.
  • Kaynak üreteci kullanılıyorsa classifier TypeClassifiers ile kayıt edilmeli.

Yazar, bir oyunun durumunu diske yazıp geri okurken tip güvenliğinin JSON'da nasıl kaybolduğunu ele alıyor. .NET 11'deki System.Text.Json union'ları tanıyor, ancak RC1 sürümünde union tipleri varsayılan ayarlarla geri okunamıyor. Yalnızca farklı şekle sahip durumlarda, JsonUnionTypeStructuralClassifier ile tek bir öznitelik yeterli oluyor. Kapalı hiyerarşiler için ise JsonPolymorphic ve JsonDerivedType listesi hâlâ elle tutulmak zorunda.

Aynı şekle sahip case tipleri için yazar, her case'e "kind" alanı ekleyen bir contract modifier ile bu alanı okuyan bir type classifier'dan oluşan geçici bir çözüm öneriyor. Bu yaklaşım özel bir converter yazmadan serileştiriciye alan işlemlerini bırakıyor ve bilinmeyen tür değerlerinde açık bir JsonException fırlatıyor. Geliştiriciler için asıl mesele, bu çözümün RC1'e özgü olduğunu ve ileride yerleşik bir seçenek çıktığında kaldırılması gerektiğini bilmek.

Gerçek dünyada kullanımı

  • Oyun, form veya iş akışı durumunu JSON dosyasına kaydedip ertesi gün aynı noktadan devam eden bir uygulama.
  • Sunucuya gönderilen komut tiplerini (ör. üç farklı eylem) JSON ile taşıyan ve her biri aynı alanlara sahip olabilen bir API.
  • Kaynak üreteci ve trimming kullanan, AOT uyumlu bir .NET uygulamasında polimorfik domain modelinin kalıcı hale getirilmesi.

Neden önemli

Union ve kapalı hiyerarşi içeren bir model kaydedilirken hangi kısmın yerleşik olarak çalıştığını bilmek, elle yazılan converter'lardan kaçınmayı sağlar. RC1'de aynı şekle sahip case'ler için "kind" alanını kendiniz eklemeniz gerekiyor.

Bu özet, NimblePros Blog üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü