using System.Collections.Generic;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.ObjectFactories;
public static void Main()
IController controller = null;
var fancyNode2 = new FancyNode(controller, "123abc");
var fancyNode1 = new FancyNode(controller, "456def");
fancyNode1.Children.Add(fancyNode2);
var coolNode1 = new CoolNode()
var coolNode2 = new CoolNode()
var root = new CoolNode();
root.Children.Add(fancyNode1);
root.Children.Add(coolNode1);
root.Children.Add(coolNode2);
var serializerBuilder = new SerializerBuilder();
serializerBuilder.EnsureRoundtrip();
var serializer = serializerBuilder.Build();
var yaml = serializer.Serialize(root);
var deserializerBuilder = new DeserializerBuilder();
deserializerBuilder.WithObjectFactory(new NodeObjectFactory());
var deserializer = deserializerBuilder.Build();
var root2 = deserializer.Deserialize<Node>(yaml);
Console.WriteLine("Deserialization was a success.");
Console.WriteLine("Deserialization was a failure.");
public List<Node> Children
this.Children = new List<Node>();
public class FancyNode : Node
private IController controller;
throw new NotSupportedException();
public FancyNode(IController controller, string id)
this.controller = controller;
public class CoolNode : Node
public interface IController
public class NodeObjectFactory : IObjectFactory
private readonly DefaultObjectFactory defaultFactory = new DefaultObjectFactory();
public object Create(Type type)
if(type == typeof(FancyNode))
return new FancyNode(null, null);
return this.defaultFactory.Create(type);