Einführung in die Arbeit mit JSON in C#
JSON (JavaScript Object Notation) ist ein leichtgewichtiges Datenaustauschformat, das in modernen Webanwendungen, APIs und Konfigurationsdateien weit verbreitet ist. Für einen C#-Entwickler ist die Fähigkeit, mit JSON zu arbeiten, eine unverzichtbare Fähigkeit, insbesondere bei der Erstellung von REST-Clients, Microservices oder Anwendungen, die mit externen Datenquellen interagieren.
Im .NET-Ökosystem gibt es zwei Hauptansätze für die JSON-Verarbeitung: die klassische Bibliothek Newtonsoft.Json (auch bekannt als Json.NET) und die moderne integrierte Bibliothek System.Text.Json, die in .NET Core 3.0 eingeführt wurde und ab .NET 5+ zum Standard wurde. Beide Bibliotheken ermöglichen zwei Schlüsseloperationen: Serialisierung (Umwandlung eines C#-Objekts in einen JSON-String) und Deserialisierung (Umwandlung eines JSON-Strings zurück in ein C#-Objekt).
In diesem Artikel werden wir beide Ansätze im Detail behandeln, lernen, komplexe Datenstrukturen zu parsen, und die besten Praktiken für die Arbeit mit JSON in C# betrachten.
1. Basisoperationen: Serialisierung und Deserialisierung
1.1 Verwendung von Newtonsoft.Json (Json.NET)
Newtonsoft.Json ist seit vielen Jahren der De-facto-Standard für die Arbeit mit JSON in .NET. Um zu beginnen, installieren Sie das Paket über NuGet:
Install-Package Newtonsoft.JsonBetrachten wir eine einfache Klasse als Beispiel:
public class User{ public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public bool IsActive { get; set; }}Serialisierung eines Objekts in JSON:
using Newtonsoft.Json;
User user = new User{ Id = 1, Name = "Ivan Petrov", Email = "ivan@example.com", IsActive = true};
string json = JsonConvert.SerializeObject(user, Formatting.Indented);Console.WriteLine(json);Ergebnis der Ausführung:
{ "Id": 1, "Name": "Ivan Petrov", "Email": "ivan@example.com", "IsActive": true}Deserialisierung von JSON zurück in ein Objekt:
string jsonString = @"{""Id"":1,""Name"":""Ivan Petrov"",""Email"":""ivan@example.com"",""IsActive"":true}";User deserializedUser = JsonConvert.DeserializeObject<User>(jsonString);Console.WriteLine($"Benutzer: {deserializedUser.Name}, E-Mail: {deserializedUser.Email}");1.2 Verwendung von System.Text.Json
Ab .NET Core 3.0 hat Microsoft eine eigene Bibliothek System.Text.Json eingeführt, die leistungsoptimiert ist und keine externen Abhängigkeiten erfordert.
Serialisierung:
using System.Text.Json;
User user = new User{ Id = 2, Name = "Maria Smirnova", Email = "maria@example.com", IsActive = false};
string json = JsonSerializer.Serialize(user, new JsonSerializerOptions { WriteIndented = true });Console.WriteLine(json);Deserialisierung:
string jsonString = @"{""Id"":2,""Name"":""Maria Smirnova"",""Email"":""maria@example.com"",""IsActive"":false}";User deserializedUser = JsonSerializer.Deserialize<User>(jsonString);Console.WriteLine($"Benutzer: {deserializedUser.Name}");2. Arbeit mit komplexen Datenstrukturen
2.1 Verschachtelte Objekte und Sammlungen
JSON enthält oft verschachtelte Strukturen. Betrachten wir ein Beispiel mit einem Array von Benutzerbestellungen:
public class Order{ public int OrderId { get; set; } public decimal Amount { get; set; } public List<string> Items { get; set; }}
public class Customer{ public int CustomerId { get; set; } public string FullName { get; set; } public List<Order> Orders { get; set; }}Deserialisierung von komplexem JSON