Предотвратите преобразование часового пояса на десериализации значения DateTime

У меня есть класс, что я сериализирую/десериализовываю использование XmlSerializer. Этот класс содержит a DateTime поле.

При сериализации, DateTime поле представлено строкой, которая включает смещение от GMT, например, 2010-05-05T09:13:45-05:00. При десериализации эти времена преобразовываются в местное время машины, выполняющей десериализацию.

По причинам, которые не стоит объяснить, я хотел бы предотвратить это преобразование часового пояса. Сериализация происходит в дикой природе, где несколько присваивают версию этого класса, существуют. Десериализация происходит на сервере, это находится под моим контролем. По сути, кажется, что это было бы лучше всего обработано во время десериализации.

Как я могу заставить это произойти кроме реализации IXmlSerializable и делая всю десериализацию "вручную?"

28
задан John Saunders 6 July 2010 в 18:23
поделиться

2 ответа

Вместо разбора как DateTime вы можете разобрать его как DateTimeOffset и использовать свойство DateTimeOffset.DateTime для игнорирования временной зоны. Например, так:

[XmlIgnore()]
public DateTime Time { get; set; }

[XmlElement(ElementName = "Time")]
public string XmlTime
{
    get { return XmlConvert.ToString(Time, XmlDateTimeSerializationMode.RoundtripKind); }
    set { Time = DateTimeOffset.Parse(value).DateTime; }
}
24
ответ дан 28 November 2019 в 03:01
поделиться

Не могли бы вы попробовать сделать что-то вроде этого поста и сделать новое строковое свойство и XmlIgnore существующего:

Поставьте [XmlIgnore] на свойство Time.

Затем добавьте новое свойство:

[XmlElement(DataType="string",ElementName="Time")]
public String TimeString
{
   get { return this.timeField.ToString("yyyy-MM-dd"); }
   set { this.timeField = DateTime.ParseExact(value, "yyyy-MM-dd", CultureInfo.InvariantCulture); }
}
2
ответ дан 28 November 2019 в 03:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: