Travailler avec YAML en C# (.NET) : la bibliothèque YamlDotNet
\n\nYAML (YAML Ain't Markup Language) est un format pratique de sérialisation de données, souvent utilisé pour les fichiers de configuration, la description de pipelines CI/CD, les manifestes Docker Compose et Kubernetes. Dans l'écosystème .NET, la bibliothèque principale pour travailler avec YAML est YamlDotNet — un outil puissant, performant et entièrement compatible avec les spécifications YAML 1.1 et 1.2.
\n\nDans cet article, nous allons voir : comment installer YamlDotNet, effectuer la sérialisation et la désérialisation de base d'objets C#, configurer des balises personnalisées et traiter des structures de données complexes.
\n\nInstallation de YamlDotNet
\n\nLa bibliothèque est disponible via NuGet. Exécutez la commande dans la console du gestionnaire de packages :
\n\ndotnet add package YamlDotNet\n\nOu via la console du gestionnaire de packages :
\n\nInstall-Package YamlDotNet\n\nUtilisation de base : désérialisation de YAML en objet C#
\n\nSupposons que nous ayons un fichier YAML config.yaml avec les paramètres de l'application :
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\nCréons les classes C# correspondantes :
\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\nMaintenant, désérialisons le YAML en objet :
\n\nusing YamlDotNet.Serialization;\nusing YamlDotNet.Serialization.NamingConventions;\n\nvar yamlContent = File.ReadAllText("config.yaml");\n\nvar deserializer = new DeserializerBuilder()\n .WithNamingConvention(UnderscoredNamingConvention.Instance) // pour 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\nSérialisation d'objets C# en YAML
\n\nLa tâche inverse — convertir un objet C# en chaîne YAML :
\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 en YAML\n .Build();\n\nvar yaml = serializer.Serialize(config);\nConsole.WriteLine(yaml);\n\nRésultat :
\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\nTravailler avec les collections et les types complexes
\n\nYamlDotNet prend parfaitement en charge les listes, les dictionnaires et les structures imbriquées. Exemple avec une 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\nBalises et types personnalisés (TagMapping)
\n\nParfois, les fichiers YAML contiennent des balises explicites
Aussi dans la bibliothèque
Serde pour Rust : guide complet avec exemples
Jetons JWT en Swift : Travailler avec JSON Web Token sur iOS/macOS
Génération de PDF en Rust : aperçu des bibliothèques et exemples de code
Génération Swagger/OpenAPI en Kotlin : guide complet des outils