wcf Несовместимость XML-сериализации с DateTime со смещением по Гринвичу - PullRequest
1 голос
/ 23 марта 2012

Я использую сторонний сервис, который сериализует объекты, содержащие datetime.Некоторые свойства DateTime в некоторых классах сериализуются в строку со смещением, например:

2012-03-22T15: 31: 18 -05: 00

Некоторые свойства DateTime внекоторые классы сериализуются в строку без смещения, например:

2012-03-24T00: 00: 00

Я считаю, что служба ожидает смещение даты и времени.Можно ли заставить классы сериализовать смещение даты и времени?

1 Ответ

1 голос
/ 23 марта 2012

Причина, по которой некоторые сериалы 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);
    }

Надеюсь, это поможет кому-то еще

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...