using System.Collections.Generic;
using YamlDotNet.Core.Events;
using YamlDotNet.Serialization;
public static void Main()
FirstName, LastName, Age, Height:
var deserializer = new Deserializer();
deserializer.RegisterTypeConverter(new GroupYamlConverter(deserializer));
var document = deserializer.Deserialize<Document>(new StringReader(yaml));
foreach(var group in document.Groups)
Console.WriteLine(group.Name);
foreach(var column in group.ColumnNames)
Console.Write("{0}\t", column);
foreach(var row in group.Rows)
Console.Write("{0}\t", cell);
public List<Group> Groups { get; set; }
public string Name { get; set; }
public IEnumerable<string> ColumnNames { get; set; }
public IList<IList<object>> Rows { get; set; }
public class GroupYamlConverter : IYamlTypeConverter
private readonly Deserializer deserializer;
public GroupYamlConverter(Deserializer deserializer)
this.deserializer = deserializer;
public bool Accepts(Type type)
return type == typeof(Group);
public object ReadYaml(IParser parser, Type type)
var reader = new EventReader(parser);
var key = reader.Expect<Scalar>();
group.Name = reader.Expect<Scalar>().Value;
group.ColumnNames = key.Value
group.Rows = deserializer.Deserialize<IList<IList<object>>>(reader);
} while(!reader.Accept<MappingEnd>());
reader.Expect<MappingEnd>();
public void WriteYaml(IEmitter emitter, object value, Type type)
throw new NotImplementedException("TODO");