using Newtonsoft.Json.Linq;
public static void Main()
""name"" : ""Joe Shmoe"",
""url"": ""http://www.someplace.com/mypicture.jpg""
""title"": ""The Godfather"",
""starring"": ""Marlon Brando"",
Person p = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine(p.Name);
Console.WriteLine(p.Age);
Console.WriteLine(p.ProfilePicture);
Console.WriteLine(p.FavoriteMovie.Title + " (" + p.FavoriteMovie.Year + ")");
Console.WriteLine(p.FavoriteColor);
[JsonConverter(typeof(JsonPathConverter))]
public string Name { get; set; }
public int Age { get; set; }
[JsonProperty("picture.data.url")]
public string ProfilePicture { get; set; }
[JsonProperty("favorites.movie")]
public Movie FavoriteMovie { get; set; }
[JsonProperty("favorites.color")]
public string FavoriteColor { get; set; }
public string Title { get; set; }
public int Year { get; set; }
class JsonPathConverter : JsonConverter
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
JObject jo = JObject.Load(reader);
object targetObj = Activator.CreateInstance(objectType);
foreach (PropertyInfo prop in objectType.GetProperties().Where(p => p.CanRead && p.CanWrite))
JsonPropertyAttribute att = prop.GetCustomAttributes(true).OfType<JsonPropertyAttribute>().FirstOrDefault();
string jsonPath = (att != null ? att.PropertyName : prop.Name);
JToken token = jo.SelectToken(jsonPath);
if (token != null && token.Type != JTokenType.Null)
object value = token.ToObject(prop.PropertyType, serializer);
prop.SetValue(targetObj, value, null);
public override bool CanConvert(Type objectType)
public override bool CanWrite
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
throw new NotImplementedException();