using System.Collections.Generic;
public static void Main()
Company company = new Company
CompanyName = "Initrode",
Boss = new Person { FirstName = "Head", LastName = "Honcho" },
Employees = new List<Person>
new Person { FirstName = "Joe", LastName = "Schmoe" },
new Person { FirstName = "John", LastName = "Doe" }
string json = JsonConvert.SerializeObject(company, Formatting.Indented);
Company c = JsonConvert.DeserializeObject<Company>(json);
Console.WriteLine("Company name: " + c.CompanyName);
Console.WriteLine("Boss first name: " + c.Boss.FirstName);
Console.WriteLine("Boss last name: " + c.Boss.LastName);
foreach (Person p in c.Employees)
Console.WriteLine("Employee first name: " + p.FirstName);
Console.WriteLine("Employee last name: " + p.LastName);
public string CompanyName { get; set; }
public Person Boss { get; set; }
public List<Person> Employees { get; set; }
[JsonConverter(typeof(ToStringJsonConverter))]
public string FirstName { get; set; }
public string LastName { get; set; }
public override string ToString()
return string.Format("{0} {1}", FirstName, LastName);
public static Person Parse(string s)
if (string.IsNullOrWhiteSpace(s))
throw new ArgumentException("s cannot be null or empty", "s");
string[] parts = s.Split(new char[] { ' ' }, 2);
Person p = new Person { FirstName = parts[0] };
class ToStringJsonConverter : JsonConverter
public override bool CanConvert(Type objectType)
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
writer.WriteValue(value.ToString());
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
MethodInfo parse = objectType.GetMethod("Parse", new Type[] { typeof(string) });
if (parse != null && parse.IsStatic && parse.ReturnType == objectType)
return parse.Invoke(null, new object[] { (string)reader.Value });
throw new JsonException(string.Format(
"The {0} type does not have a public static Parse(string) method that returns a {0}.",