Trabajo con YAML en C# (.NET): biblioteca YamlDotNet

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con YAML en C# (.NET): biblioteca YamlDotNet



YAML (YAML Ain't Markup Language) es un formato conveniente de serialización de datos que se utiliza a menudo para archivos de configuración, descripción de pipelines CI/CD, Docker Compose y manifiestos de Kubernetes. En el ecosistema .NET, la biblioteca principal para trabajar con YAML es YamlDotNet, una herramienta potente, eficiente y totalmente compatible con las especificaciones YAML 1.1 y 1.2.



En este artículo veremos: cómo instalar YamlDotNet, realizar serialización y deserialización básica de objetos C#, configurar etiquetas personalizadas y procesar estructuras de datos complejas.



Instalación de YamlDotNet



La biblioteca está disponible a través de NuGet. Ejecuta el comando en la consola del administrador de paquetes:



dotnet add package YamlDotNet


O a través de Package Manager Console:



Install-Package YamlDotNet


Uso básico: deserialización de YAML a objeto C#



Supongamos que tenemos un archivo YAML config.yaml con la configuración de la aplicación:



app:  name: MyApp  version: 2.0.1  debug: truedatabase:  host: localhost  port: 5432  credentials:    user: admin    password: secret


Creemos las clases C# correspondientes:



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 CredentialsConfig Credentials { get; set; }}

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

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


Ahora deserialicemos el YAML en un objeto:



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

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

var deserializer = new DeserializerBuilder() .WithNamingConvention(UnderscoredNamingConvention.Instance) // para snake_case .Build();

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

Console.WriteLine(config.App.Name); // MyAppConsole.WriteLine(config.Database.Port); // 5432


Serialización de objetos C# a YAML



La tarea inversa: convertir un objeto C# en una cadena YAML:



var config = new RootConfig{    App = new AppConfig { Name = "MyApp", Version = "2.0.1", Debug = true },    Database = new DatabaseConfig    {        Host = "localhost",        Port = 5432,        Credentials = new CredentialsConfig { User = "admin", Password = "secret" }    }};

var serializer = new SerializerBuilder() .WithNamingConvention(CamelCaseNamingConvention.Instance) // camelCase en YAML .Build();

var yaml = serializer.Serialize(config);Console.WriteLine(yaml);


Resultado:



app:  name: MyApp  version: 2.0.1  debug: truedatabase:  host: localhost  port: 5432  credentials:    user: admin    password: secret


Trabajo con colecciones y tipos complejos



YamlDotNet admite perfectamente listas, diccionarios y estructuras anidadas. Ejemplo con una lista:



public class Project{    public string Name { get; set; }    public List<string> Tags { get; set; }}

// YAML:// name: MyProject// tags:// - dotnet// - yaml// - csharp

var yaml = @"name: MyProjecttags: - dotnet - yaml - csharp";

var deserializer = new DeserializerBuilder().Build();var project = deserializer.Deserialize<Project>(yaml);

foreach (var tag in project.Tags) Console.WriteLine(tag);


Etiquetas y tipos personalizados (TagMapping)



A veces los archivos YAML contienen etiquetas explícitas t

Recommendations