Einführung in die Arbeit mit JSON in C#
\n\nJSON (JavaScript Object Notation) ist ein leichtgewichtiges Datenaustauschformat, das in der Webentwicklung, mobilen Anwendungen und Microservices weit verbreitet ist. Für einen C#-Entwickler ist die Fähigkeit, mit JSON zu arbeiten, eine grundlegende Fähigkeit. In diesem Artikel behandeln wir die Grundlagen des Parsings (Deserialisierung) und der Serialisierung von JSON unter Verwendung des modernen Namespace System.Text.Json, der in .NET Core 3.0 und höher sowie .NET 5/6/7/8 enthalten ist.
Wir werden Folgendes behandeln:
\n- \n
- Was Serialisierung und Deserialisierung sind \n
- Wie man ein C#-Objekt in einen JSON-String umwandelt \n
- Wie man JSON liest und zurück in ein Objekt umwandelt \n
- Arbeit mit verschachtelten Objekten und Sammlungen \n
- Fehlerbehandlung und Konfiguration der Serialisierung \n
Alle Codebeispiele sind für eine C#-Konsolenanwendung (.NET 6+) geschrieben. Sie können sie kopieren und sofort ausführen.
\n\n1. Grundlagen der Serialisierung: Objekt → JSON
\n\nSerialisierung ist der Prozess der Umwandlung eines Objekts (oder einer Datenstruktur) in einen JSON-String. In C# wird dafür die Klasse JsonSerializer aus dem Namespace System.Text.Json verwendet.
Erstellen eines einfachen Modells
\n\nAngenommen, wir haben eine Klasse Person:
public class Person\n{\n public string Name { get; set; }\n public int Age { get; set; }\n public string Email { get; set; }\n}\n\nSerialisierung eines Objekts
\n\nJetzt erstellen wir eine Instanz und wandeln sie in JSON um:
\n\nusing System.Text.Json;\n\nPerson person = new Person\n{\n Name = "Ivan Petrov",\n Age = 30,\n Email = "ivan@example.com"\n};\n\nstring jsonString = JsonSerializer.Serialize(person);\nConsole.WriteLine(jsonString);\n\nErgebnis:
\n\n{"Name":"Ivan Petrov","Age":30,"Email":"ivan@example.com"}\n\nStandardmäßig verwendet JsonSerializer camelCase für Eigenschaftsnamen (erster Buchstabe klein), aber in unserem Beispiel bleiben die Namen großgeschrieben, da wir die Einstellungen nicht geändert haben. Wenn Sie striktes camelCase benötigen, verwenden Sie JsonSerializerOptions:
var options = new JsonSerializerOptions\n{\n PropertyNamingPolicy = JsonNamingPolicy.CamelCase\n};\nstring jsonCamelCase = JsonSerializer.Serialize(person, options);\nConsole.WriteLine(jsonCamelCase);\n// {"name":"Ivan Petrov","age":30,"email":"ivan@example.com"}\n\n2. Deserialisierung: JSON → Objekt
\n\nDeserialisierung ist der umgekehrte Prozess: Wir nehmen einen JSON-String und wandeln ihn in ein C#-Objekt um.
\n\nEinfaches Beispiel einer Deserialisierung
\n\nAngenommen, wir haben JSON von einer API erhalten:
\n\nstring jsonFromApi = @"{""Name"":""Anna Smirnova"",""Age"":25,""Email"":""anna@test.com""}";\n\nPerson? personFromJson = JsonSerializer.Deserialize<Person>(jsonFromApi);\n\nif (personFromJson != null)\n{\n Console.WriteLine($"Name: {personFromJson.Name}, Alter: {personFromJson.Age}");\n}\n\nBeachten Sie das Zeichen ? nach dem Typ Person – dies ist eine Nullable-Annotation, die angibt, dass das Ergebnis null sein kann (z. B. wenn das JSON ungültig ist).
Arbeit mit Arrays und Listen
\n\nOft enthält JSON Sammlungen von Objekten. Angenommen, wir haben ein Array von Benutzern:
\n\nstring jsonArray = @"\n[\n {""Name"":""Oleg"",""Age"":35},\n {""Name"":""Maria"",""Age"":28},\n {""Name"":""Dmitri"",""Age"":42}\n]";\n\nList<Person>? people = JsonSerializer.Deserialize<List<Person>>(jsonArray);\n\nif (people != null)\n{\n foreach (var p in people)\n {\n Console.WriteLine($"{p.Name} - {p.Age} Jahre");\n }\n}\n\n3. Arbeit mit verschachtelten Objekten und komplexen Strukturen
\n\nEchte JSON-Daten sind selten flach. Betrachten wir