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şturucusu 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 bu ek açıklamayı da içeriyor[JsonSourceGenerationOptions]
artık sınıfın tüm seçeneklerini sunuyorJsonSerializerOptions
sınıfla zorunlu olarak planlama yaparkenText.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 (ör. 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çıyor.
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)
Bir yanıt yazın