.NET 8.0'da yeni [29]: JSON kaynakları jeneratörü için iyileştirmeler

Womanne

Member
System.Text.Json Standartta, JSON'un .NET nesneleri üzerinde eşleşmesi yüzler. Sürüm 6.0'dan System.Text.Json ayrıca bir kaynak jeneratörü. Bu, geliştirme sırasında haritalama kodunu zaten oluşturur, böylece terim kodu derecesi gerekmez. JSON kaynak jeneratörü performansı optimize etmek için önemli bir araçtı (ve).








Holger Schwichtenberg, 53 ünlü uzmanla tavsiye ve eğitim yoluyla ve yazılımın geliştirilmesinde çok sayıda orta ve büyük şirketi destekleyen uzmanlar ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası uzman konferansındaki görünümleri, 90'dan fazla uzman kitabı ve 1.500'den fazla uzman makalesi sayesinde Holger Schwichtenberg, Almanya'daki .NET ve Web teknikleri için en iyi uzmanlardan biridir.







API çekirdeği ASP.net üzerindeki doğal AOT derleyicisinin genişlemesi ile daha önemli hale geldi, çünkü doğal AOT bir derlemeyi tamamlamayı mümkün kılmıyor.




JSON Font Jeneratörü System.Text.Json Sürüm 8.0 aşağıdaki yeni seçenekler:

  • JSON için Origin Jeneratörü (Text.Json.SourceGeneration.JsonSourceGenerator) Şimdi ayrıca sadece C# 9.0'da tanıtılan baş harflerinin özelliklerini ve C# 11.0'da tanıtılan gerekli özellikleri de desteklemektedir.
  • Geliştiriciler, proje ayarını bunu sağlamak için kullanabilirler. System.Text.Json Artık çalışma zamanı kodu değil: <JsonSerializerIsReflectionEnabledByDefault>false</JsonSerializerIsReflectionEnabledByDefault>
  • Kod cemaati mümkünse, geliştiriciler program kodunda statik bir üye ile sorgulayabilirler: IsReflectionEnabledByDefault
  • Yeniliklere System.Text.Json 8.0 ayrıca ek açıklamaya aittir [JsonSourceGenerationOptions] Şimdi sınıfın da tüm seçeneklerini sunuyor JsonSerializerOptions Sınıfla programlama yaparken Text.Json. JsonSerializer izin verilmiş.
Kod kodu terimi JSON Serializer'da sönerse, ancak yine de menşe jeneratörü olmadan serileştirmeye çalışırsınız (örneğin JsonSerializer.Serialize(new { value = 42 });), aşağıdaki hata mesajı toplanırsa: “Bu uygulama için yansımaya dayalı serileştirme devre dışı bırakıldı.

Kod kodu terimi JSON serileştiricisinde kapalı ise, JsonSerializerContext Ek açıklama ile kullanılan türev sınıfını oluşturdu [JsonSerializable] Serileştirme sınıflarına (DE) referanslar. İsteğe bağlı olarak, ayarını kullanabilirsiniz. [JsonSourceGenerationOptions] Yapmak.






BetterCode Online Konferansı () .NET 9.0 of 19 Kasım 2024'te IX ve dpunkt.verlag .net-Expert www.it-visions.de'den. Bunlar. Program altı ders, tartışma ve altı seminer sunuyor.

Biletler erken bir fiyata mevcuttur.







Aşağıdaki kodda kullanılan sınıflar Consultant VE Person Serinin önceki kısmı için zaten örnek koddaydılar:


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

internal partial class PersonJsonContext : JsonSerializerContext
{
}



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


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



Aşağıdaki liste onu şurada gösteriyor System.Text.Json Şimdi, terk edilme ile dolu olmayan talep edilen bir üye, JSON Origin jeneratörleri için bir terim hatasına 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
}




(RME)
 
Üst