Одним из способов является комбинированная установка DateParseHandling, чтобы не преобразовывать строку DateTime, а затем пользовательский JsonConverter для DateTime
Очень простой конвертер даты и времени, который собирается взорваться, если это не время в формате UTC, может быть
public class DateTimeConverter : JsonConverter<DateTime>
{
public override void WriteJson(JsonWriter writer, DateTime value, JsonSerializer serializer)
{
writer.WriteValue(value.ToString("u"));
}
public override DateTime ReadJson(JsonReader reader, Type objectType, DateTime existingValue, bool hasExistingValue, JsonSerializer serializer)
{
string s = (string)reader.Value;
return DateTime.ParseExact(s,"u", CultureInfo.InvariantCulture);
}
}
тогда ваш код десериализации будет выглядеть так:
var settings = new JsonSerializerSettings()
{
DateParseHandling = DateParseHandling.None,
Converters = new List<JsonConverter>()
{
new DateTimeConverter()
}
};
var deserialized = JsonConvert.DeserializeObject<MyDate>(json, settings);