一尘不染

强制XmlSerializer将DateTime序列化为'YYYY-MM-DD hh:mm:ss'

c#

我有一些RESTful服务的XSD架构。当与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:ssXSD生成的代码似乎只能生成YYYY-MM-DD

如果我手动修改XSD以xs:dateTime键入,则生成的C#代码将产生:2010-08-20T20:07:03.915039Z

基本上,我如何强制序列化产生YYYY-MM-DD hh:mm:ss?是否可以对XSD进行某些操作,或者可以对生成的C#代码进行更改?


阅读 829

收藏
2020-05-19

共1个答案

一尘不染

过去,我已经完成了以下操作来控制日期时间序列化:

  • 忽略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); }
    }
}
2020-05-19