Objekt-Serialisierung in C# (.NET): Von den Grundlagen bis zu fortgeschrittenen Techniken
Serialisierung ist der Prozess der Umwandlung komplexer Objekte (Klassen, Strukturen) in ein Format, das in einer Datei gespeichert, über ein Netzwerk übertragen oder in einer Datenbank gespeichert werden kann. Der umgekehrte Prozess (Wiederherstellung eines Objekts aus einem Datenstrom) wird Deserialisierung genannt. In der .NET-Plattform gibt es mehrere integrierte und externe Tools für die Serialisierung, jedes mit seinen eigenen Besonderheiten, Leistungsmerkmalen und Anwendungsbereichen.
In diesem Artikel behandeln wir die wichtigsten Serialisierungsmethoden in C#: JSON (System.Text.Json und Newtonsoft.Json), XML (XmlSerializer), binäre Serialisierung (BinaryFormatter – veraltet, aber immer noch anzutreffen) und Protocol Buffers (protobuf-net) für leistungsstarke Szenarien.
1. Serialisierung in JSON mit System.Text.Json
Seit .NET Core 3.0 empfiehlt Microsoft die Verwendung des Namespace System.Text.Json für die Arbeit mit JSON. Es handelt sich um eine schnelle, low-level und asynchrone API.
Beispiel für Serialisierung und Deserialisierung:
using System;using System.Text.Json;
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}
class Program{ static void Main() { var person = new Person { Name = "Ivan Petrov", Age = 30, Email = "ivan@example.com" };
// Serialisierung in einen JSON-String string jsonString = JsonSerializer.Serialize(person); Console.WriteLine(jsonString); // Ausgabe: {"Name":"Ivan Petrov","Age":30,"Email":"ivan@example.com"}
// Deserialisierung aus JSON string jsonInput = @"{""Name"":""Maria"",""Age"":25,""Email"":""maria@test.ru""}"; Person restoredPerson = JsonSerializer.Deserialize<Person>(jsonInput); Console.WriteLine($"Name: {restoredPerson.Name}, Alter: {restoredPerson.Age}"); }}Konfiguration der Serialisierung:
- Ignorieren von null-Eigenschaften:
JsonSerializerOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull } - Formatierung (pretty print):
JsonSerializerOptions { WriteIndented = true } - Arbeiten mit zirkulären Verweisen:
ReferenceHandler.Preserve
2. Newtonsoft.Json (Json.NET) – der Klassiker
Vor dem Erscheinen von System.Text.Json war die Bibliothek Newtonsoft.Json (über NuGet installierbar) der De-facto-Standard. Sie unterstützt mehr Szenarien: dynamische Objekte, Attribute, Konverter und flexible Einstellungen.
using Newtonsoft.Json;
public class Order{ public int Id { get; set; } public decimal Amount { get; set; } [JsonIgnore] public string InternalNote { get; set; } // Dieses Feld wird nicht serialisiert}
var order = new Order { Id = 1, Amount = 99.99m, InternalNote = "Geheim" };string json = JsonConvert.SerializeObject(order, Formatting.Indented);Console.WriteLine(json);// {// "Id": 1,// "Amount": 99.99// }
var deserialized = JsonConvert.DeserializeObject<Order>(json);3. Serialisierung in XML (XmlSerializer)
Für das XML-Format wird in .NET die Klasse XmlSerializer verwendet. Sie eignet sich gut für die Kompatibilität mit älteren Systemen und SOAP-Diensten.
using System;using System.IO;using System.Xml.Serialization;
[Serializable]public class Product{ [XmlAttribute] public int Id { get; set; } [XmlElement("ProductName")] public string Name { get; set; }}
class Program{ static void Main() { var product = new Product { Id = 42, Name = "Laptop" };
// Serialisier Auch in der Bibliothek
Polars für Rust: Vollständiges Tutorial mit Beispielen
Faker für PHP: Komplette Anleitung mit Beispielen
Arbeiten mit Apache Kafka in Go (Golang): Bibliotheken und Beispiele
Prometheus-Metriken in TypeScript: Vollständiger Leitfaden zum Monitoring