Travailler avec YAML en C# (.NET) : bibliothèques et exemples d'utilisation

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec YAML en C# (.NET) : bibliothèques et exemples pratiques



YAML (YAML Ain't Markup Language) est un format de sérialisation de données populaire, largement utilisé pour les fichiers de configuration, DevOps (Ansible, Kubernetes, Docker Compose) et l'échange de données. Dans l'écosystème .NET, il n'y a pas de support intégré pour YAML, mais il existe de puissantes bibliothèques tierces. Dans cet article, nous examinerons deux principales : YamlDotNet (la plus populaire) et SharpYaml (une alternative légère), et nous montrerons comment les intégrer dans des projets C#.



1. Pourquoi choisir YAML plutôt que JSON/XML ?

  • Syntaxe lisible par l'homme avec des indentations (sans parenthèses ni guillemets).
  • Prise en charge des commentaires (commençant par #).
  • Prise en charge intégrée des structures complexes (listes, dictionnaires, chaînes multilignes).
  • Standard de facto pour les configurations dans la conteneurisation et le CI/CD.


2. Bibliothèque principale : YamlDotNet

YamlDotNet est la bibliothèque la plus mature et la mieux maintenue pour .NET (y compris .NET Core, .NET 5+). Elle fournit un cycle complet : désérialisation (YAML → objets C#) et sérialisation (objets → YAML).



2.1 Installation via NuGet

dotnet add package YamlDotNet

Ou via le gestionnaire de packages Visual Studio : Install-Package YamlDotNet.



2.2 Désérialisation de base

Supposons que nous ayons un fichier config.yaml :

# Paramètres de l'applicationapp:  name: MyApp  version: 1.0.0  debug: false

database: host: localhost port: 5432 credentials: user: admin password: secret


Créons les classes C# correspondantes :

public class AppConfig{    public string Name { get; set; }    public string Version { get; set; }    public bool Debug { get; set; }}

public class DatabaseConfig{ public string Host { get; set; } public int Port { get; set; } public Credentials Credentials { get; set; }}

public class Credentials{ public string User { get; set; } public string Password { get; set; }}

public class RootConfig{ public AppConfig App { get; set; } public DatabaseConfig Database { get; set; }}


Analysons maintenant le YAML en objets :

using YamlDotNet.Serialization;using YamlDotNet.Serialization.NamingConventions;

var yamlContent = File.ReadAllText("config.yaml");

var deserializer = new DeserializerBuilder() .WithNamingConvention(UnderscoredNamingConvention.Instance) // pour les underscores .Build();

var config = deserializer.Deserialize<RootConfig>(yamlContent);

Console.WriteLine($"App : {config.App.Name} v{config.App.Version}");Console.WriteLine($"Hôte DB : {config.Database.Host}:{config.Database.Port}");


2.3 Sérialisation d'objets en YAML

var serializer = new SerializerBuilder()    .WithNamingConvention(CamelCaseNamingConvention.Instance)    .Build();

var config = new RootConfig{ App = new AppConfig { Name = "TestApp", Version = "2.0.0", Debug = true }, Database = new DatabaseConfig { Host = "192.168.1.1", Port = 3306, Credentials = new Credentials { User = "root", Password = "qwerty" } }};

string yamlOutput = serializer.Serialize(config);Console.WriteLine(yamlOutput);


2.4 Travailler avec des données dynamiques

Si la structure YAML est inconnue à l'avance, utilisez Dictionary<object, object> :

var deserializer = new DeserializerBuilder()    .Build();

var result = deserializer.Deserialize<Dictionary<object, object>>(yamlContent);// Parcours récursif du dictionnairePrintYaml(result, 0);

void PrintYaml(Dictionary<object, object> dict, int indent){ foreach (var kvp in dict) { Console.WriteLine($"{new string(' ', indent * 2)}{kvp.Key}: {kvp.Value}");

Recommendations