using System.Collections.Generic;
using YamlDotNet.Core.Events;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
public Dictionary<string, App> Apps { get; set; }
public Dictionary<string, Setting> Settings { get; set; }
public class SettingsBase
public string Test {get;set;}
public string Prod {get;set;}
public class Setting : SettingsBase, IYamlConvertible
public void Read(IParser parser, Type type, ObjectDeserializer nestedObjectDeserializer)
var scalar = parser.Allow<Scalar>();
Test = Prod = scalar.Value;
var values = (SettingsBase)nestedObjectDeserializer(typeof(SettingsBase));
public void Write(IEmitter emitter, ObjectSerializer nestedObjectSerializer)
nestedObjectSerializer(Test);
nestedObjectSerializer(new SettingsBase { Test = this.Test, Prod = this.Prod });
public static void Main()
redirectUrl: http://www.test.com
test: http://www.test.com
prod: http://www.prod.com
var deserializer = new DeserializerBuilder()
.WithNamingConvention(new CamelCaseNamingConvention())
var config = deserializer.Deserialize<Dictionary<string, App>>(yaml);
foreach(var app in config)
Console.WriteLine(app.Key);
app.Value.Settings["redirectUrl"].Dump();
var serializer = new SerializerBuilder()
.WithNamingConvention(new CamelCaseNamingConvention())
serializer.Serialize(Console.Out, config);