Почему DateTime.MinValue не может быть сериализован в часовых поясах раньше времени UTC?

У меня возникли проблемы со службой WCF REST. У объекта-проводника, который я пытаюсь вернуть, некоторые свойства не заданы, что приводит к DateTime.MinValue для свойств типа DateTime. Служба возвращает пустой документ (со статусом HTTP 200 ???). Когда я пытаюсь вызвать сериализацию JSON самостоятельно, возникает следующее исключение:

SerializationException: значения DateTime, которые больше DateTime.MaxValue или меньше DateTime.MinValue при преобразовании в UTC, не могут быть сериализованы в JSON.

Это можно воспроизвести, запустив следующий код в консольном приложении:

DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(DateTime));
MemoryStream m = new MemoryStream();
DateTime dt = DateTime.MinValue;

// throws SerializationException in my timezone
ser.WriteObject(m, dt);
string json = Encoding.ASCII.GetString(m.GetBuffer());
Console.WriteLine(json);

Почему такое поведение? Я думаю, это связано с моим часовым поясом (GMT + 1). Поскольку DateTime.MinValue является значением по умолчанию (DateTime), я ожидаю, что это может быть сериализовано без проблем.

Какие-нибудь советы о том, как заставить мою службу REST работать? Я не хочу менять свой DataContract.

51
задан Teun D 26 October 2010 в 23:32
поделиться