2012-03-22 2 views
1

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

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

Некоторые свойства DateTime в некоторых классах сериализовать в строку без смещение как:

2012-03-24T00: 00: 00

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

ответ

1

Причина, по которой некоторые DateTime серийный с GMT смещение, а некоторые не должен делать с Вид собственности из DateTime

DateTimes создать с DateTime.Now() установить их Kind собственность как DateTimeKind.Local DateTimes create with DateTime.Parse() устанавливает свойство своего типа как DateTimeKind.Unspecified

Функция ToString («o») может использоваться для сериализации в формате GMT. Вид неуказанного не знает смещения, поэтому он пропускается.

неопределенный Тип: 2012-03-24T00: 00: 00 местный Вид: 2012-03-22T15: 31: 18 -05: 00

Существует функция называется SpecifyKind, но это работает только тогда, когда вид is NOT установлен на неуказанный.

Решение заключается в создании 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); 
    } 

Я надеюсь, что это помогает кто-то еще