.NET 8.0'daki yenilikler [28]: JSON nesnelerinin seri durumdan çıkarılmasına yönelik uzantı

Saberie

Active member
Yeni eklenen fonksiyonla UnmappedMemberHandling nasıl olduğuyla ilgili System.Text.Json seri durumdan çıkarma sırasında nesnede özelliklerden daha fazla özellik olduğunda davranır.


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.







Aşağıdaki örnek kodda, bu JSON dizesinde “CITY” özelliği var ancak buna karşılık gelen bir özellik yok City sınıfta Consultant ve temel sınıfı Person.

Sınıflar Consultant VE Person bunlar önceki bölümde zaten kullanılmıştı ve burada tekrarlanmadı. Adlandırma kuralının durdurulması da tartışıldı.


try
{
var jsonString = """
{
"ID":42,
"FULL-NAME":"Holger Schwichtenberg",
"PERSONAL-WEBSITE":"www.dotnet-doktor.de",
"CITY":"Essen"
}
""";
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);
}



Şu ana kadar System.Text.Json Daha fazla bilgi basitçe göz ardı edilir. Standart versiyonda da durum aynıdır. Ek açıklama yoluyla [JsonUnmappedMemberHandling] seri durumdan çıkarılacak sınıf veya mülkte UnmappedMemberHandling nesnede JsonSerializerOptions Geliştiriciler artık bunu değiştirebilir: izin verilen değerler Skip (Daha önce olduğu gibi yoksay) e Disallow.




Aşağıdaki atış Disallow Yani yukarıdakileri çözer Deserialize() bir çalışma zamanı hatası: “JSON özelliği 'CITY', 'FCL_JSON.Consultant' türünde bulunan herhangi bir .NET üyesiyle eşlenemez.”


var options = new JsonSerializerOptions
{
// NEU: Enumeration JsonNamingPolicy mit Namenskonventionen
// KebabCaseLower, KebabCaseUpper, SnakeCaseLower
// und SnakeCaseUppter als Alternative zum
// bisher fest gesetzten CamelCase
PropertyNamingPolicy = JsonNamingPolicy.KebabCaseUpper,
// Standard wäre CamelCase

// NEU: Einstellungen zur Handhabung zusätzlicher Daten
// bei der Deserialisierung von JSON in Objekten
// via Annotation [JsonUnmappedMemberHandling]
// oder Eigenschaft UnmappedMemberHandling
// im Objekt JsonSerializerOptions.
UnmappedMemberHandling = JsonUnmappedMemberHandling.Disallow,
// Default wäre Skip
};







(Resim: Dmytro Vikarchuk/Shutterstock))


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.








(kendim)
 
Üst