Objekt-Serialisierung in C# (.NET): JSON, XML und Binary

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Objekt-Serialisierung in C# (.NET): JSON, XML und Binary

\n

Serialisierung ist der Prozess der Umwandlung eines komplexen Objekts (oder Objektgraphen) in einen Bytestrom oder ein Textformat (JSON, XML). Dies ist notwendig, um den Zustand eines Objekts in einer Datei zu speichern, Daten über ein Netzwerk zu übertragen (REST API, gRPC) oder für das Caching. Der umgekehrte Prozess – die Deserialisierung – stellt das Objekt aus der serialisierten Darstellung wieder her. Im .NET-Ökosystem (einschließlich .NET Core und .NET 5/6/7/8) gibt es mehrere integrierte Serialisierungsmechanismen.

\n\n

1. System.Text.Json – moderne JSON-Serialisierung

\n

Seit .NET Core 3.0 empfiehlt Microsoft die Verwendung von System.Text.Json als primäre Methode für die Arbeit mit JSON. Die Bibliothek ist leichtgewichtig, hochperformant und benötigt keine Abhängigkeiten von Drittanbietern (im Gegensatz zu Newtonsoft.Json).

\n

Beispiel für grundlegende Serialisierung und Deserialisierung

\n
using System;\nusing System.Text.Json;\n\npublic class Person\n{\n    public string Name { get; set; }\n    public int Age { get; set; }\n    public List<string> Hobbies { get; set; }\n}\n\nclass Program\n{\n    static void Main()\n    {\n        var person = new Person\n        {\n            Name = "Alexej",\n            Age = 30,\n            Hobbies = new List<string> { "Lesen", "Programmieren" }\n        };\n\n        // Serialisierung\n        string json = JsonSerializer.Serialize(person);\n        Console.WriteLine(json);\n        // {"Name":"Alexej","Age":30,"Hobbies":["Lesen","Programmieren"]}\n\n        // Deserialisierung\n        Person restored = JsonSerializer.Deserialize<Person>(json);\n        Console.WriteLine(restored.Name); // Alexej\n    }\n}
\n\n

Serialisierung mit Attributen konfigurieren

\n

Sie können die Namen der Eigenschaften im JSON steuern, Null-Werte ignorieren oder benutzerdefinierte Konverter verwenden:

\n
using System.Text.Json.Serialization;\n\npublic class Product\n{\n    [JsonPropertyName("product_id")]\n    public int Id { get; set; }\n\n    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]\n    public string? Description { get; set; }\n\n    [JsonConverter(typeof(JsonStringEnumConverter))]\n    public Status Status { get; set; }\n}\n\npublic enum Status { Active, Inactive }
\n\n

2. XmlSerializer – Serialisierung in XML

\n

Die Klasse XmlSerializer (Namespace System.Xml.Serialization) ist in allen .NET-Versionen verfügbar und ideal für die Kompatibilität mit Legacy-Systemen oder Konfigurations-XML-Dateien.

\n

Beispiel für die Arbeit mit XmlSerializer

\n
using System;\nusing System.IO;\nusing System.Xml.Serialization;\n\n[XmlRoot("Employee")]\npublic class Employee\n{\n    [XmlElement("FullName")]\n    public string Name { get; set; }\n\n    [XmlAttribute("id")]\n    public int Id { get; set; }\n\n    [XmlArray("Projects")]\n    [XmlArrayItem("Project")]\n    public List<string> Projects { get; set; }\n}\n\nclass Program\n{\n    static void Main()\n    {\n        var emp = new Employee\n        {\n            Id = 101,\n            Name = "Maria Ivanova",\n            Projects = new List<string> { "Alpha", "Beta" }\n        };\n\n        var serializer = new XmlSerializer(typeof(Employee));\n        using (var writer = new StreamWriter("employee.xml"))\n        {\n            serializer.Serialize(writer, emp);\n        }\n\n        // Deserialisierung\n        using (var reader = new StreamReader("employee.xml"))\n        {\n            Employee restored = (Employee)serializer.Deserialize(reader);\n            Console.WriteLine(restored.Name); // Maria Ivanova\n        }\n    }\n}
\n

Wichtig: XmlSerializer erfordert, dass die Klasse einen öffentlichen parameterlosen Konstruktor hat und die serialisierbaren Eigenschaften öffentlich sind und Setter besitzen.

\n\n

3. BinaryFormatter (veraltet, aber für Legacy erwähnt)

\n

Früher wurde System.Runtime.Serialization.Formatters.Binary.Bi

Empfehlungen