Основная проблема DateTime.MinValue
имеет DateTimeKind.Unspecified
вид. Он определяется как:
MinValue = new DateTime(0L, DateTimeKind.Unspecified);
Но это не реальная проблема, это определение приводит к проблеме во время сериализации. Сериализация JSON DateTime выполняется через:
System.Runtime.Serialization.Json.JsonWriterDelegator.WriteDateTime(DateTime value)
К сожалению, оно определяется как:
...
if (value.Kind != DateTimeKind.Utc)
{
long num = value.Ticks - TimeZone.CurrentTimeZone.GetUtcOffset(value).Ticks;
if ((num > DateTime.MaxValue.Ticks) || (num < DateTime.MinValue.Ticks))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.GetString("JsonDateTimeOutOfRange"), new ArgumentOutOfRangeException("value")));
}
}
...
То есть он не учитывает Unspecified
и обрабатывает его как Local
. Чтобы избежать этой ситуации, вы можете определить свою собственную константу:
MinValueUtc = new DateTime(0L, DateTimeKind.Utc);
или
MinValueUtc = DateTime.MinValue.ToUniversalTime();
Это выглядит странно, конечно, но это помогает.