using System.Collections.Generic;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
namespace YamlDotNet.Samples
public class DeserializeObjectGraph
var input = new StringReader(Document);
var deserializer = new Deserializer(namingConvention: new CamelCaseNamingConvention());
var order = deserializer.Deserialize<Order>(input);
Console.WriteLine("Order");
Console.WriteLine("-----");
foreach(var item in order.Items)
Console.WriteLine("{0}\t{1}\t{2}\t{3}", item.PartNo, item.Quantity, item.Price, item.Descrip);
Console.WriteLine("Shipping");
Console.WriteLine("--------");
Console.WriteLine(order.ShipTo.Street);
Console.WriteLine(order.ShipTo.City);
Console.WriteLine(order.ShipTo.State);
Console.WriteLine("Billing");
Console.WriteLine("-------");
if(order.BillTo == order.ShipTo) {
Console.WriteLine("*same as shipping address*");
Console.WriteLine(order.ShipTo.Street);
Console.WriteLine(order.ShipTo.City);
Console.WriteLine(order.ShipTo.State);
Console.WriteLine("Delivery instructions");
Console.WriteLine("---------------------");
Console.WriteLine(order.SpecialDelivery);
public string Receipt { get; set; }
public DateTime Date { get; set; }
public Customer Customer { get; set; }
public List<OrderItem> Items { get; set; }
public Address BillTo { get; set; }
public Address ShipTo { get; set; }
public string SpecialDelivery { get; set; }
public string Given { get; set; }
public string Family { get; set; }
public string PartNo { get; set; }
public string Descrip { get; set; }
public decimal Price { get; set; }
public int Quantity { get; set; }
public string Street { get; set; }
public string City { get; set; }
public string State { get; set; }
private const string Document = @"---
receipt: Oz-Ware Purchase Invoice
descrip: Water Bucket (Filled)
descrip: High Heeled ""Ruby"" Slippers
Road to the Emerald City.