Neu in .NET 8.0 [27]: Konfigurierbare Namenskonventionen in System.Text.Json 8.0
In der JSON-Bibliothek können Entwicklerinnen und Entwickler nun neben CamelCasing auch andere Namenskonventionen wählen.

(Bild: Shutterstock.com/calimedia)
- Dr. Holger Schwichtenberg
Der JSON-Serializer System.Text.Json
(NuGet-Paket) erhielt in Version 8.0 einige Erweiterungen.
Im Gegensatz zu anderen Teilen von .NET 8.0 wie Entity Framework Core 8.0 läuft System.Text.Json
nicht nur auf .NET 8.0, sondern auch älteren .NET-Versionen. System.Text.Json
funktioniert mit dem klassischen .NET Framework ab Version 4.6.2 und dem modernen .NET ab Version 2.0.
Version 8.0 verwendet fĂĽr die Serialisierung von Objekteigenschaften nach JSON und die Deserialisierung aus JSON die Namenskonventionen KebabCaseLower
, KebabCaseUpper
, SnakeCaseLower
und SnakeCaseUpper
in der Enumeration JsonNamingPolicy
als Alternative zum bisher fest gesetzten CamelCasing
.
Beispiele fĂĽr diese Namenskonventionen sind:
PascalCase
: FullNameCamelCase
: fullNameKebabCaseLower
: full-nameKebabCaseUpper
: FULL-NAMESnakeCaseLower
: full_nameSnakeCaseUpper
: FULL_NAME
Im folgenden Listing kommt KebabCaseUpper
beim Serialisieren und Deserialisieren einer Instanz der Klasse Consultant
zum Einsatz:
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);
}
Das nachstehende Listing 2 zeigt die Datenobjekte Person
und Consultant
sowie deren Schnittstellen:
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)}";
}
}
(Bild:Â Dmytro Vikarchuk/Shutterstock)
In der Online-Konferenz betterCode() .NET 9.0 am 19. November 2024 von iX und dpunkt.verlag präsentieren .NET-Experten von www.IT-Visions.de den fertigen Stand von .NET 9.0 anhand von Praxisbeispielen. Dazu zählen die Neuerungen in .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 und die Integration von Künstlicher Intelligenz in .NET-Anwendungen. Das Programm bietet sechs Vorträge, eine Diskussion und sechs Workshops.
Tickets sind zum Frühbucherpreis erhältlich.
(rme)