Сериализация DateTime для времени без миллисекунд и gmt - PullRequest
12 голосов
/ 19 сентября 2008

Я создал файл класса 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 для типа данных времени.

Ответы [ 2 ]

22 голосов
/ 19 сентября 2008

Поместите [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); }
}
13 голосов
/ 19 сентября 2008

Вы можете создать строковое свойство, которое выполняет преобразование в / из вашего поля timeField, и поместить в него атрибут сериализации вместо реального свойства DateTime, которое использует остальная часть приложения.

...