Arbeit mit YAML in C# (.NET): Die Bibliothek YamlDotNet

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

Arbeit mit YAML in C# (.NET): Die Bibliothek YamlDotNet

\n\n

YAML (YAML Ain't Markup Language) ist ein praktisches Daten-Serialisierungsformat, das häufig für Konfigurationsdateien, die Beschreibung von CI/CD-Pipelines, Docker Compose und Kubernetes-Manifesten verwendet wird. Im .NET-Ökosystem ist die wichtigste Bibliothek für die Arbeit mit YAML YamlDotNet – ein leistungsstarkes, performantes und vollständig mit den YAML-Spezifikationen 1.1 und 1.2 kompatibles Werkzeug.

\n\n

In diesem Artikel behandeln wir: Wie man YamlDotNet installiert, eine grundlegende Serialisierung und Deserialisierung von C#-Objekten durchführt, benutzerdefinierte Tags konfiguriert und komplexe Datenstrukturen verarbeitet.

\n\n

Installation von YamlDotNet

\n\n

Die Bibliothek ist über NuGet verfügbar. Führen Sie den folgenden Befehl in der Paket-Manager-Konsole aus:

\n\n
dotnet add package YamlDotNet
\n\n

Oder über die Package Manager Console:

\n\n
Install-Package YamlDotNet
\n\n

Grundlegende Verwendung: Deserialisierung von YAML in ein C#-Objekt

\n\n

Angenommen, wir haben eine YAML-Datei config.yaml mit Anwendungseinstellungen:

\n\n
app:\n  name: MyApp\n  version: 2.0.1\n  debug: true\ndatabase:\n  host: localhost\n  port: 5432\n  credentials:\n    user: admin\n    password: secret
\n\n

Erstellen wir die entsprechenden C#-Klassen:

\n\n
public class AppConfig\n{\n    public string Name { get; set; }\n    public string Version { get; set; }\n    public bool Debug { get; set; }\n}\n\npublic class DatabaseConfig\n{\n    public string Host { get; set; }\n    public int Port { get; set; }\n    public CredentialsConfig Credentials { get; set; }\n}\n\npublic class CredentialsConfig\n{\n    public string User { get; set; }\n    public string Password { get; set; }\n}\n\npublic class RootConfig\n{\n    public AppConfig App { get; set; }\n    public DatabaseConfig Database { get; set; }\n}
\n\n

Jetzt deserialisieren wir das YAML in ein Objekt:

\n\n
using YamlDotNet.Serialization;\nusing YamlDotNet.Serialization.NamingConventions;\n\nvar yamlContent = File.ReadAllText("config.yaml");\n\nvar deserializer = new DeserializerBuilder()\n    .WithNamingConvention(UnderscoredNamingConvention.Instance) // für snake_case\n    .Build();\n\nvar config = deserializer.Deserialize<RootConfig>(yamlContent);\n\nConsole.WriteLine(config.App.Name);        // MyApp\nConsole.WriteLine(config.Database.Port);   // 5432
\n\n

Serialisierung von C#-Objekten in YAML

\n\n

Die umgekehrte Aufgabe – ein C#-Objekt in einen YAML-String umwandeln:

\n\n
var config = new RootConfig\n{\n    App = new AppConfig { Name = "MyApp", Version = "2.0.1", Debug = true },\n    Database = new DatabaseConfig\n    {\n        Host = "localhost",\n        Port = 5432,\n        Credentials = new CredentialsConfig { User = "admin", Password = "secret" }\n    }\n};\n\nvar serializer = new SerializerBuilder()\n    .WithNamingConvention(CamelCaseNamingConvention.Instance) // camelCase in YAML\n    .Build();\n\nvar yaml = serializer.Serialize(config);\nConsole.WriteLine(yaml);
\n\n

Ergebnis:

\n\n
app:\n  name: MyApp\n  version: 2.0.1\n  debug: true\ndatabase:\n  host: localhost\n  port: 5432\n  credentials:\n    user: admin\n    password: secret
\n\n

Arbeit mit Sammlungen und komplexen Typen

\n\n

YamlDotNet unterstützt Listen, Wörterbücher und verschachtelte Strukturen hervorragend. Beispiel mit einer Liste:

\n\n
public class Project\n{\n    public string Name { get; set; }\n    public List<string> Tags { get; set; }\n}\n\n// YAML:\n// name: MyProject\n// tags:\n//   - dotnet\n//   - yaml\n//   - csharp\n\nvar yaml = @"\nname: MyProject\ntags:\n  - dotnet\n  - yaml\n  - csharp\n";\n\nvar deserializer = new DeserializerBuilder().Build();\nvar project = deserializer.Deserialize<Project>(yaml);\n\nforeach (var tag in project.Tags)\n    Console.WriteLine(tag);
\n\n

Benutzerdefinierte Tags und Typen (TagMapping)

\n\n

Manchmal enthalten YAML-Dateien explizite T

Empfehlungen