Заставьте XmlSerializer сериализовать DateTime как 'YYYY-MM-DD hh:mm:ss'

У меня есть 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# код?

66
задан dtb 20 August 2010 в 20:14
поделиться

2 ответа

Раньше для управления сериализацией даты и времени я делал следующее:

  • Игнорируйте свойство DateTime.
  • Создайте свойство фиктивной строки, которое сериализует / десериализует так, как я хочу

Вот пример:

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); }
    }
}
130
ответ дан 24 November 2019 в 14:50
поделиться

Я считаю, что реализация интерфейса IXmlSerializable поможет. Затем вы можете контролировать, как вы сериализуете и десериализуете свой объект.

3
ответ дан 24 November 2019 в 14:50
поделиться
Другие вопросы по тегам:

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