Сериализация даты и времени во время без миллисекунд и gmt
-
01-07-2019 - |
Вопрос
Я создал файл класса C #, используя XSD-файл в качестве входных данных.Одно из моих свойств выглядит примерно так:
private System.DateTime timeField;
[System.Xml.Serialization.XmlElementAttribute(DataType="time")]
public System.DateTime Time {
get {
return this.timeField;
}
set {
this.timeField = value;
}
}
При сериализации содержимое файла теперь выглядит следующим образом:
<Time>14:04:02.1661975+02:00</Time>
Возможно ли, используя XmlAttributes в свойстве, чтобы оно отображалось без миллисекунд и значения GMT следующим образом?
<Time>14:04:02</Time>
Возможно ли это, или мне нужно взломать какую-то xsl / xpath-replace-magic после сериализации класса?
Это не решение для изменения объекта на String, поскольку оно используется как DateTime в остальной части приложения и позволяет нам создавать xml-представление из объекта с помощью XmlSerializer.Метод Serialize().
Причина, по которой мне нужно удалить дополнительную информацию из поля, заключается в том, что принимающая система не соответствует стандартам w3c для типа данных time.
Решение
Вы могли бы создать строковое свойство, которое выполняет перевод в / из вашего поля TimeField, и поместить в него атрибут сериализации вместо реального свойства DateTime, которое использует остальная часть приложения.
Другие советы
Поместите [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); }
}