using Newtonsoft.Json.Linq;
public static void Main()
var tasksSerialized = JsonConvert.SerializeObject(new TaskEntity
Street1 = LocationFaker.Street(),
Number = LocationFaker.StreetNumber().ToString(),
City = LocationFaker.City(),
ZipCode = LocationFaker.ZipCode(),
Country = LocationFaker.Country()
Console.WriteLine(tasksSerialized);
var taskEntities = JsonConvert.DeserializeObject<TaskEntity>(tasksSerialized);
Console.WriteLine("Street1: " + taskEntities.Street1);
Console.WriteLine("Street2: " + taskEntities.Street2);
Console.WriteLine("Number: " + taskEntities.Number);
Console.WriteLine("Box: " + taskEntities.Box);
Console.WriteLine("ZipCode: " + taskEntities.ZipCode);
Console.WriteLine("City: " + taskEntities.City);
Console.WriteLine("Country: " + taskEntities.Country);
[JsonConverter(typeof(JsonPathConverter))]
public Address Addresses { get; set; }
[JsonProperty(PropertyName = "Addresses.Street1")]
public string Street1 { get; set; }
[JsonProperty(PropertyName = "Addresses.Street2")]
public string Street2 { get; set; }
[JsonProperty(PropertyName = "Addresses.Number")]
public string Number { get; set; }
[JsonProperty(PropertyName = "Addresses.Box")]
public string Box { get; set; }
[JsonProperty(PropertyName = "Addresses.ZipCode")]
public string ZipCode { get; set; }
[JsonProperty(PropertyName = "Addresses.City")]
public string City { get; set; }
[JsonProperty(PropertyName = "Addresses.Country")]
public string Country { get; set; }
public string Street1 { get; set; }
public string Street2 { get; set; }
public string Number { get; set; }
public string Box { get; set; }
public string ZipCode { get; set; }
public string City { get; set; }
public string Country { get; set; }
public override string ToString()
return string.Format("{0} {1}{2}, {3} {4}, {5}",
(string.IsNullOrEmpty(Box) ? "" : " " + Box),
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();