Arbeit mit YAML in C# (.NET): Die Bibliothek YamlDotNet
\n\nYAML (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\nIn 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\nInstallation von YamlDotNet
\n\nDie Bibliothek ist über NuGet verfügbar. Führen Sie den folgenden Befehl in der Paket-Manager-Konsole aus:
\n\ndotnet add package YamlDotNet\n\nOder über die Package Manager Console:
\n\nInstall-Package YamlDotNet\n\nGrundlegende Verwendung: Deserialisierung von YAML in ein C#-Objekt
\n\nAngenommen, wir haben eine YAML-Datei config.yaml mit Anwendungseinstellungen:
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\nErstellen wir die entsprechenden C#-Klassen:
\n\npublic 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\nJetzt deserialisieren wir das YAML in ein Objekt:
\n\nusing 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\nSerialisierung von C#-Objekten in YAML
\n\nDie umgekehrte Aufgabe – ein C#-Objekt in einen YAML-String umwandeln:
\n\nvar 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\nErgebnis:
\n\napp:\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\nArbeit mit Sammlungen und komplexen Typen
\n\nYamlDotNet unterstützt Listen, Wörterbücher und verschachtelte Strukturen hervorragend. Beispiel mit einer Liste:
\n\npublic 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\nBenutzerdefinierte Tags und Typen (TagMapping)
\n\nManchmal enthalten YAML-Dateien explizite T
Auch in der Bibliothek
PM2 — Überwachung von JavaScript-Anwendungen (Node.js)
Joi für JavaScript (Node.js): Vollständige Anleitung mit Beispielen
Proptest für Rust: Vollständiges Tutorial mit Beispielen
Bildverarbeitung in C#: Resize, Crop mit der Bibliothek ImageSharp
ts-functional-pipe TypeScript: Komplettleitfaden mit Beispielen