У меня есть XSD схема для некоторого RESTful сервиса. При использовании вместе с xsd.exe
для генерации C# кода, XSD xs:date
генерирует следующий код:
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType="date")]
public System.DateTime time {
get {
return this.timeField;
}
set {
this.timeField = value;
}
}
При десериализации XML в объекты с помощью XmlSerializer
все вроде бы хорошо. Проблема, с которой я столкнулся, заключается в том, что служба ожидает, что даты будут отформатированы как YYYY-MM-DD hh:mm:ss
, а XSD сгенерированный код, похоже, выдает только YYYY-MM-DD
.
Если я модифицирую XSD вручную до типа xs:dateTime
, сгенерированный код C# выдает: 2010-08-20T20:07:03.915039Z
.
В принципе, как заставить сериализацию выдавать YYYY-MM-DD hh:mm:ss
? Нужно ли что-то делать с XSD или можно как-то изменить сгенерированный C# код?
Раньше для управления сериализацией даты и времени я делал следующее:
Вот пример:
public class SomeClass
{
[XmlIgnore]
public DateTime SomeDate { get; set; }
[XmlElement("SomeDate")]
public string SomeDateString
{
get { return this.SomeDate.ToString("yyyy-MM-dd HH:mm:ss"); }
set { this.SomeDate = DateTime.Parse(value); }
}
}
Я считаю, что реализация интерфейса IXmlSerializable
поможет. Затем вы можете контролировать, как вы сериализуете и десериализуете свой объект.