.NET 8.0'daki yenilikler [27]: System.Text.Json 8.0'da yapılandırılabilir adlandırma kuralları

Womanne

Member
JSON serileştiricisi System.Text.Json (NuGet paketi) 8.0 sürümünde bazı iyileştirmeler aldı.


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.







Entity Framework Core 8.0 gibi .NET 8.0'ın diğer bölümlerinin aksine System.Text.Json yalnızca .NET 8.0'da değil, aynı zamanda eski .NET sürümlerinde de. System.Text.Json 4.6.2 sürümündeki klasik .NET Framework ve 2.0 sürümündeki modern .NET ile çalışır.




Sürüm 8.0, nesne özelliklerini JSON'a serileştirmek ve JSON'dan seri durumdan çıkarmak için adlandırma kurallarını kullanır KebabCaseLower, KebabCaseUpper, SnakeCaseLower VE SnakeCaseUpper numaralandırmada JsonNamingPolicy daha önce belirlenmiş olana alternatif olarak CamelCasing.

Bu adlandırma kurallarına örnekler şunları içerir:

  • PascalCase: Adı ve soyadı
  • CamelCase: Adı ve soyadı
  • KebabCaseLower: Adı ve soyadı
  • KebabCaseUpper: ADI VE SOYADI
  • SnakeCaseLower: Adı ve soyadı
  • SnakeCaseUpper: ADI VE SOYADI
Aşağıdaki listede geliyor KebabCaseUpper sınıfın bir örneğini serileştirirken ve seri durumdan çıkarırken Consultant kullanmak için:


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 ist CamelCase
};

var consultant = new Consultant() { ID = 42, FullName = "Holger Schwichtenberg", Salutation = "Dr.", PersonalWebsite = "www.dotnet-doktor.de" };
consultant.Languages.AddRange(["C#", "JavaScript", "TypeScript"]);
consultant.Address = new Address() { City = "Essen", Country = "Germany" };
Console.WriteLine("Objekt im RAM:");
Console.WriteLine(consultant);
Console.WriteLine();

CUI.H3("Serialisierung (KebabCaseUpper):");
string json1 = JsonSerializer.Serialize(consultant, options);
Console.WriteLine(json1); // {"ID":42,"FULL-NAME":"Holger Schwichtenberg","SALUTATION":"Dr.","PERSONAL-WEBSITE":"www.dotnet-doktor.de"}

CUI.H3("nDeserialisierung: (vollständig)");
try
{
var jsonString = """
{"ID":42,"FULL-NAME":"Holger Schwichtenberg","SALUTATION":"Dr.",
"PERSONAL-WEBSITE":"www.dotnet-doktor.de",
"ADDRESS":{"COUNTRY":"Germany","CITY":"Essen"}}
""";
Console.WriteLine(jsonString);
var obj = JsonSerializer.Deserialize<Consultant>(jsonString, options);
if (obj != null) CUI.Success(obj.ToString());
}
catch (Exception ex)
{
CUI.PrintError(ex.Message);
}



Aşağıdaki Liste 2 veri nesnelerini gösterir Person VE Consultant ve arayüzleri:


using System.Text.Json.Serialization;

namespace FCL_JSON;

public interface IBusinessObject
{
UInt128 ID { get; init; }
}

public interface IPerson : IBusinessObject
{
string? Salutation { get; set; }
string? FullName { get; set; }
public Address Address { get; set; }
}

public interface IConsultant : IPerson
{
string? PersonalWebsite { get; set; }
public List<string> Languages { get; }
}

public class Address
{
public string Country { get; set; }
public string City { get; set; }
}

public class Person : IPerson
{
public Person() { }
public required UInt128 ID { get; init; }
public required string FullName { get; set; }
public string? Salutation { get; set; }
public Address Address { get; set; }

public override string ToString()
{
return $"Person {ID}: {(!String.IsNullOrEmpty(Salutation) ? Salutation + " " : "")}{FullName} wohnt in {Address?.City ?? "UNBEKANNT"} ";
}
}

public class Consultant : Person, IConsultant
{
public Consultant() { }

public List<string> Languages { get; } = new();

public string? PersonalWebsite { get; set; }

public override string ToString()
{
return $"Consultant {ID}: {(!String.IsNullOrEmpty(Salutation) ? Salutation + " " : "")}{FullName} wohnt in {Address.City} -> {PersonalWebsite} Sprachen: {String.Join('+', Languages)}";
}
}




BetterCode() .NET 9.0 çevrimiçi konferansı, 19 Kasım 2024



(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