.NET 8.0'daki yenilikler [29]: JSON kaynak oluşturucusunda iyileştirmeler

Womanne

Member
System.Text.Json Standart sürümde JSON, çalışma zamanı kodu oluşturma kullanılarak .NET nesnelerine eşlenir. 6.0 sürümünden beri var System.Text.Json aynı zamanda bir kaynak jeneratörü. Bu, eşleme kodunu geliştirme zamanında oluşturur, dolayısıyla çalışma zamanı kodu oluşturmaya gerek yoktur. JSON kaynak oluşturucu, performans optimizasyonu için önemli bir araçtı (ve hala da öyledir).


Duyuru








Dr. Holger Schwichtenberg, 53 tanınmış uzmanıyla danışmanlık, eğitim ve yazılım geliştirme yoluyla çok sayıda orta ve büyük ölçekli şirketi destekleyen www.IT-Visions.de uzman ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası konferansa katılımı, 90'dan fazla uzmanlık kitabı ve 1.500'den fazla uzmanlık makalesi sayesinde Holger Schwichtenberg, .NET ve web teknolojileri konusunda Almanya'nın en tanınmış uzmanlarından biridir.







Ancak yerel AOT derleyicisinin ASP.NET Core Web API'lerini kapsayacak şekilde genişletilmesiyle bu daha da önemli hale geldi çünkü yerel AOT ile çalışma zamanı derlemesi mümkün değildir.




JSON kaynak oluşturucu şunları sunar: System.Text.Json Sürüm 8.0 aşağıdaki yeni seçeneklere sahiptir:

  • JSON için kaynak oluşturucu (Text.Json.SourceGeneration.JsonSourceGenerator) artık C# 9.0'da tanıtılan salt başlangıç özelliklerini ve C# 11.0'da tanıtılan zorunlu özellikleri de destekliyor.
  • Geliştiriciler bunu proje ayarları aracılığıyla sağlayabilirler System.Text.Json Çalışma zamanı kodu oluşturma artık hiç yapılmıyor: <JsonSerializerIsReflectionEnabledByDefault>false</JsonSerializerIsReflectionEnabledByDefault>
  • Geliştiriciler, çalışma zamanı kodu oluşturmanın mümkün olup olmadığını sorgulamak için program kodundaki statik bir üyeyi kullanabilir: IsReflectionEnabledByDefault
  • Yeniliklerle ilgili olarak System.Text.Json 8.0 aynı zamanda bu ek açıklamayı da içerir [JsonSourceGenerationOptions] artık sınıfın tüm seçeneklerini sunuyor JsonSerializerOptions sınıfla zorunlu olarak planlama yaparken Text.Json. JsonSerializer izin verilmiş.
JSON serileştiricisinde çalışma zamanı kodu oluşturma devre dışıysa ancak yine de kaynak kod oluşturucu olmadan serileştirmeye çalışıyorsanız (örn. JsonSerializer.Serialize(new { value = 42 });), aşağıdaki hata iletisini alırsınız: “Bu uygulama için yansıma tabanlı serileştirme devre dışı bırakıldı. Lütfen kaynak oluşturucu API'lerini kullanın veya 'JsonSerializerOptions.TypeInfoResolver' özelliğini açıkça yapılandırın.”

JSON serileştiricisinde çalışma zamanı kodu oluşturma devre dışı bırakıldıysa aşağıdakilerden birini kullanmanız gerekir: JsonSerializerContext Ek açıklama yoluyla türetilmiş bir sınıf oluşturma [JsonSerializable] seri hale getirilecek (de) .NET sınıflarına referanslar alır. İsteğe bağlı olarak ayarı şu şekilde yapabilirsiniz: [JsonSourceGenerationOptions] Yapmak.






iX ve dpunkt.verlag tarafından 19 Kasım 2024'te düzenlenecek BetterCode() .NET 9.0 çevrimiçi konferansında, www.IT-Visions.de adresindeki .NET uzmanları pratik örnekler kullanarak .NET 9.0'ın son sürümünü sunacaklar. Bunlar arasında .NET 9.0 SDK, C# 13.0, ASP.NET Core 9.0, Blazor 9.0, Windows Forms 9.0, WPF 9.0, WinUI, .NET MAUI 9.0'daki yenilikler ve yapay zekanın .NET uygulamalarına entegrasyonu yer alıyor. Programda altı ders, bir tartışma ve altı atölye çalışması yer alıyor.

Biletler peşin fiyatlarla mevcuttur.







Aşağıdaki kodda kullanılan sınıflar Consultant VE Person bunlar zaten serinin önceki bölümünün örnek kodunda yer alıyordu:


[JsonSerializable(typeof(Address))]
[JsonSerializable(typeof(Person))]
[JsonSerializable(typeof(Consultant))]
[JsonSourceGenerationOptions(PreferredObjectCreationHandling
=JsonObjectCreationHandling.Populate)]

internal partial class PersonJsonContext : JsonSerializerContext
{
}



Bu nedenle serileştirme seçeneklerinde bu sınıfı belirtmeniz gerekir:


var options = new JsonSerializerOptions
{
TypeInfoResolver = PersonJsonContext.Default
};



Aşağıdaki liste şunu göstermektedir: System.Text.Json Artık seri durumdan çıkarma sırasında derlenmeyen gerekli bir üye, JSON kaynak oluşturucusunda çalışma zamanı hatasına da yol açmaktadır.


try
{
var jsonString = """
{"FULL-NAME":"Holger Schwichtenberg","PERSONAL-WEBSITE":"www.dotnet-doktor.de"}
""";
Console.WriteLine("JSON: " + jsonString);
var obj = JsonSerializer.Deserialize<Consultant>(jsonString, options);
if (obj != null) CUI.Success(obj.ToString());
}
catch (Exception ex)
{
CUI.PrintError(ex.Message); // JSON deserialization for type 'NET8Konsole.Consultant' was missing required properties, including the following: ID !!! Vor .NET 8.0 wäre hier in Verbindung mit Source Generator KEIN Laufzeitfehler aufgetreten. ID war = 0
}




(kendim)
 
Üst