изменить вывод сериализации xml - PullRequest
5 голосов
/ 06 июля 2011

ответ веб-службы передает обратно XML-файл, один элемент имеет тип Date, его формат содержит информацию о часовом поясе, например,

12-30-2010T10:00:00+1:00

у моего класса есть поле (DateTime) для получениязначение, однако, просто изменить дату на местное время.

12-30-2010T10:00:00+1:00

будет преобразовано в

12-30-2010T02:00:00 (мое местное время - CST).

Таким образом, исходная информация о часовом поясе будет потеряна.мне нужно только время, игнорирующее информацию о часовом поясе, просто

12-30-2010T10:00:00

или каким-то образом я могу извлечь информацию о часовом поясе в ответе, чтобы я мог настроить преобразованное время обратно на исходное времядо преобразования.

Кто-нибудь знает, как это сделать в C #?

спасибо

1 Ответ

2 голосов
/ 06 июля 2011

DateTimeOffset похоже на DateTime, но также сохраняет исходную информацию о смещении часового пояса.К сожалению, XmlSerializer не поддерживает DateTimeOffset (DataContractSerializer поддерживает, но не будет сериализовать его в ожидаемую строку).

Если у вас есть опция, я бы порекомендовал вам использоватьТип DateTimeOffset и дополнительное свойство string для сериализации.Вот пример:

[Serializable]
public class MyClass
{
    const string TimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'sszzz";

    [XmlElement("Time")]
    public string TimeString { get{return Time.ToString(TimeFormat);} set{Time = DateTimeOffset.ParseExact(value, TimeFormat, null);} }

    [XmlIgnore]
    public DateTimeOffset Time { get; set; }
}

Ваш код будет взаимодействовать со свойством Time, тогда как XmlSerializer будет эффективно использовать свойство TimeString вместо него.Затем вы можете точно контролировать, как обрабатывается преобразование в / из xml.

Если вы не хотите использовать тип DateTimeOffset, вы можете изменить методы TimeString, чтобы сделать что-то другое (например, сохранитьвремя в одном поле и смещение в другом поле).

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