Einleitung: Warum jeder C#-Entwickler Objekte in JSON serialisieren können sollte
\n\nHaben Sie sich jemals gefragt, wie oft Ihr Code pro Tag komplexe C#-Objekte in kompakte JSON-Strings verwandelt? Die Arbeit mit Web-APIs, das Speichern von Konfigurationen, die Datenübertragung zwischen Microservices – überall stoßen wir auf Serialisierung. Die Frage "How do I turn a C# object into a JSON string in .NET?" ist eine der beliebtesten auf Stack Overflow, und das nicht ohne Grund. Davon, wie genau Sie dies tun, hängt die Geschwindigkeit Ihrer Anwendung und ihre Reaktionsfähigkeit ab.
\n\nIn diesem Artikel zeigen wir nicht nur, wie man ein Objekt in einen JSON-String umwandelt. Wir analysieren Optimierung und Leistung dieses Prozesses: von der Bibliotheksauswahl bis zur Feinabstimmung des Serialisierers. Sie erfahren, wie Sie typische Fehler vermeiden, die Ihre Anwendung verlangsamen, und lernen, Code zu schreiben, der blitzschnell arbeitet.
\n\nDie grundlegende Methode: Wie man ein C#-Objekt in einen JSON-String umwandelt
\n\nBeginnen wir mit der Klassik. Nehmen wir an, wir haben eine einfache Klasse User:
public class User\n{\n public int Id { get; set; }\n public string Name { get; set; }\n public string Email { get; set; }\n}\n\nDer einfachste Weg, es zu serialisieren, ist die Verwendung von Newtonsoft.Json (auch bekannt als Json.NET):
\n\nusing Newtonsoft.Json;\n\nvar user = new User { Id = 1, Name = "Alexej", Email = "alex@example.com" };\nstring json = JsonConvert.SerializeObject(user);\nConsole.WriteLine(json); \n// {"Id":1,"Name":"Alexej","Email":"alex@example.com"}\n\nMit der Veröffentlichung von .NET Core 3.0 kam das native System.Text.Json – eine schnelle und leichte Alternative:
\n\nusing System.Text.Json;\n\nvar user = new User { Id = 1, Name = "Alexej", Email = "alex@example.com" };\nstring json = JsonSerializer.Serialize(user);\nConsole.WriteLine(json);\n// {"Id":1,"Name":"Alexej","Email":"alex@example.com"}\n\nEs scheint keinen Unterschied zu geben. Aber wenn Ihre Anwendung Tausende von Anfragen pro Sekunde verarbeitet, wird die Wahl des Serialisierers entscheidend.
\n\nLeistung: Newtonsoft.Json vs System.Text.Json
\n\nSchauen wir uns die Serialisierungsleistung in .NET 8 an. In Tests mit 1 Million Operationen:
\n\n- \n
- System.Text.Json – im Durchschnitt 40-60% schneller als Newtonsoft.Json bei der Serialisierung einfacher Objekte. \n
- Newtonsoft.Json – verliert an Geschwindigkeit, gewinnt aber an Flexibilität: Es unterstützt mehr benutzerdefinierte Konverter und Attribute. \n
- Speicherverbrauch – System.Text.Json erzeugt weniger Müll, was die Belastung des Garbage Collectors (GC) reduziert. \n
Es gibt jedoch eine Einschränkung: Wenn Sie Unterstützung für JsonIgnore, JsonPropertyName oder komplexe Konverter benötigen, ist Newtonsoft.Json nach wie vor unverzichtbar. Für die meisten modernen Projekte auf .NET 6+ wird jedoch die Verwendung von System.Text.Json empfohlen.
Optimierung der Serialisierung: 5 praktische Tipps
\n\nKommen wir nun zum Interessantesten – wie Sie Ihren Code noch schneller machen können.
\n\n1. Verwenden Sie Source Generators
\n\nSystem.Text.Json unterstützt Source Generation – die Kompilierung des Serialisierungscodes zur Build-Zeit anstatt zur Laufzeit. Ergebnis: eine Beschleunigung um das 2- bis 3-fache!
\n\n[JsonSerializable(typeof(User))]\npublic partial class UserContext : JsonSerializerContext\n{\n}\n\n// Verwendung:\nstring json = JsonSerializer.Serialize(user, UserContext.Default.User);\n\nDieser Ansatz ist besonders effektiv für große Modelle und Anwendungen mit hoher Auslastung.
\n\n2. Passen Sie den Serialisierer an Ihre Aufgaben an
\n\nVerwenden Sie nicht die Standardeinstellungen. Deaktivieren Sie unnötige Optionen:
\n\nvar options = new JsonSerializerOptions\n{\n PropertyNamingPolicy = JsonNami