using System.Collections.Generic;
using AgileObjects.AgileMapper;
public static void Main()
var input = new NewCustomerInput
AuthId = new Optional<string> { Value = "123" },
BirthDate = new Optional<DateTime?> { Value = new DateTime(1990, 01, 01) },
Addresses = new Optional<List<Address>>
Value = new List<Address>
new Address { Line1 = "One", Line2 = "Two" }
var result = Mapper.Map(input).ToANew<Customer>(cfg => cfg
.Map(i => i.AuthId.Value, c => c.AuthId)
.And.Map(i => i.BirthDate.Value, c => c.BirthDate)
.And.Map(i => i.Addresses.Value, c => c.Addresses));
Console.WriteLine("AuthId = " + result.AuthId);
Console.WriteLine("Email = " + result.Email);
Console.WriteLine("BirthDate = " + result.BirthDate);
Console.WriteLine("Addresses = " + result.Addresses.Count);
Console.WriteLine("Addresses[0].Line1 = " + result.Addresses[0].Line1);
Console.WriteLine("Addresses[0].Line2 = " + result.Addresses[0].Line2);
public bool HasValue { get { return Value != null; } }
public T Value { get; set; }
Addresses = new List<Address>();
public string AuthId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public DateTime? BirthDate { get; set; }
public List<Address> Addresses { get; set; }
public class NewCustomerInput
public Optional<string> AuthId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public Optional<DateTime?> BirthDate { get; set; }
public Optional<List<Address>> Addresses { get; set; }
public string Line1 { get; set; }
public string Line2 { get; set; }