Причина, по которой некоторые сериалы DateTime со смещением по Гринвичу, а некоторые не связаны со свойством Kind из DateTime
DateTimes создаются с DateTime.Now (), устанавливают их свойство Kind как DateTimeKind.Local
DateTimes создаются с помощью DateTime.Parse (), устанавливают для своего свойства Kind значение DateTimeKind.Unspecified
Функция ToString ("o") может использоваться для сериализации в формат GMT. Вид неопределенного не знает смещения, поэтому он пропускается.
не указано Вид: 2012-03-24T00: 00: 00
Местный Вид: 2012-03-22T15: 31: 18 -05: 00
Существует функция SpecifyKind, но она работает только в том случае, если для типа NOT установлено значение unspecified.
Решением является создание DateTime со следующим конструктором:
DateTime (год, месяц, день, час, минута, секунда, DateTimeKind.Local);
http://msdn.microsoft.com/en-us/library/t882fzc6.aspx
Я создал короткий метод расширения для этого:
public static DateTime SpecifyKindLocal(this DateTime datetime)
{
return new DateTime(datetime.Year, datetime.Month, datetime.Day, datetime.Hour, datetime.Minute, datetime.Second, DateTimeKind.Local);
}
Надеюсь, это поможет кому-то еще