public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType != JsonToken.String)
throw new Exception("Unexpected token parsing date. Expected String, got {0}.".FormatWith(reader.TokenType));
string dateText = reader.Value.ToString();
if (objectType == typeof(DateTimeOffset))
return DateTimeOffset.Parse(dateText, CultureInfo.InvariantCulture, dateTimeStyles);
return DateTime.Parse(dateText, CultureInfo.InvariantCulture, dateTimeStyles);
}