using System.Collections.Generic;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
public string Title { get; set; }
public List<Author> Authors { get; set; }
public string Name { get; set; }
public List<Book> Books { get; set; }
public static void Main()
var knownTypes = new[] { typeof(Author), typeof(Book) };
SerializerBuilder serializerBuilder = new SerializerBuilder()
.WithNamingConvention(PascalCaseNamingConvention.Instance)
DeserializerBuilder deserializerBuilder = new DeserializerBuilder()
.WithNamingConvention(PascalCaseNamingConvention.Instance)
.IgnoreUnmatchedProperties()
foreach (Type type in knownTypes)
serializerBuilder = serializerBuilder.WithTagMapping($"!{type.FullName}", type);
deserializerBuilder = deserializerBuilder.WithTagMapping($"!{type.FullName}", type);
var serializer = serializerBuilder.Build();
var deserializer = deserializerBuilder.Build();
List<Book> books1 = new() { new Book() { Title = "title1", Authors = new List<Author>() } };
books1[0].Authors.Add(author1);
string yaml = serializer.Serialize(author1);
Author deserialized = deserializer.Deserialize<Author>(yaml);
Console.WriteLine(deserialized.Name);
Console.WriteLine(deserialized.Books.FirstOrDefault()?.Title ?? "");