using System.Text.RegularExpressions;
public static void Main()
string Data = "{\"aaa\":\"2017-05-12\"}";
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.DateParseHandling = DateParseHandling.None;
settings.Converters.Add(new DateJsonConverter());
Xxx x= JsonConvert.DeserializeObject<Xxx>(Data, settings);
Console.WriteLine(x.Aaa.Year);
Data = "{\"aaa\":\"2017-05-12T08:15:00\"}";
x = JsonConvert.DeserializeObject<Xxx>(Data, settings);
Console.WriteLine(x.Aaa.Year);
public int Year { get; set; }
public int Month { get; set; }
public int Day { get; set; }
public MyDate Aaa { get; set; }
public class DateJsonConverter : JsonConverter
private readonly Regex _isoDate = new Regex(@"^(\d+)-(\d+)-(\d+).*", RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
throw new NotImplementedException();
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
Console.WriteLine(reader.Value.GetType());
Match m = _isoDate.Match((string)reader.Value);
throw new Exception("Format error for " + (string)reader.Value);
Year = Int32.Parse(m.Groups[1].Value),
Month = Int32.Parse(m.Groups[2].Value),
Day = Int32.Parse(m.Groups[3].Value),
public override bool CanConvert(Type objectType)
return objectType == typeof(MyDate);