using System.Collections.Generic;
using Newtonsoft.Json.Linq;
public static void Main()
""event_name"": ""event1"",
""start_date"": ""2018-11-30"",
""end_date"": ""2018-12-04"",
""first_name"": ""John"",
""from"": ""2017-05-05"",
""city"": ""Some other city"",
""email"": ""jane@smith.com"",
""telephone"": ""1-369-81891""
var settings = new JsonSerializerSettings
Converters = new List<JsonConverter>
Console.WriteLine("----- Event deserialized from JSON format #1 -----");
var evt = JsonConvert.DeserializeObject<Event>(json, settings);
Console.WriteLine("----- Event deserialized from JSON format #2 -----");
evt = JsonConvert.DeserializeObject<Event>(json2, settings);
private static void DumpEvent(Event evt)
Console.WriteLine("Event ID: " + evt.EventId);
Console.WriteLine("Event Name: " + evt.EventName);
Console.WriteLine("Start Date: " + evt.StartDate.ToShortDateString());
Console.WriteLine("End Date: " + evt.EndDate.ToShortDateString());
Console.WriteLine(" -- Guest List --");
foreach (var guest in evt.Guests)
Console.WriteLine(" Guest ID: " + guest.GuestId);
Console.WriteLine(" First Name: " + guest.FirstName);
Console.WriteLine(" Last Name: " + guest.LastName);
Console.WriteLine(" Email: " + guest.Email);
public int EventId { get; set; }
public string EventName { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public List<Guest> Guests { get; set; }
public string GuestId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public class EventConverter : JsonConverter
public override bool CanConvert(Type objectType)
return objectType == typeof(Event);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
JObject obj = JObject.Load(reader);
if (obj["event_id"] != null)
evt.EventId = (int)obj["event_id"];
evt.EventName = (string)obj["event_name"];
evt.StartDate = (DateTime)obj["start_date"];
evt.EndDate = (DateTime)obj["end_date"];
evt.Guests = obj.SelectToken("participants.guests").ToObject<List<Guest>>(serializer);
else if (obj["name"] != null)
evt.EventName = (string)obj["name"];
evt.StartDate = (DateTime)obj["from"];
evt.EndDate = (DateTime)obj["to"];
evt.Guests = obj["guests"].ToObject<List<Guest>>(serializer);
throw new JsonException("Unknown format for Event");
public override bool CanWrite
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
throw new NotImplementedException();
public class GuestConverter : JsonConverter
public override bool CanConvert(Type objectType)
return objectType == typeof(Guest);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
Guest guest = new Guest();
JObject obj = JObject.Load(reader);
if (obj["guest_id"] != null)
guest.GuestId = (string)obj["guest_id"];
guest.FirstName = (string)obj["first_name"];
guest.LastName = (string)obj["last_name"];
else if (obj["email"] != null)
guest.FirstName = (string)obj["firstName"];
guest.LastName = (string)obj["lastName"];
guest.Email = (string)obj["email"];
throw new JsonException("Unknown format for Guest");
public override bool CanWrite
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
throw new NotImplementedException();