我有一些用于某些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
all的对象似乎很好.我面临的问题是服务要求将日期格式化为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#代码?
在过去,我已完成以下操作来控制日期时间序列化:
忽略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); } } }
使用[XmlElement(DataType = "date")]
属性可DateTime
根据需要设置属性值的格式.
来自MSDN:
注意:
注释publicationdate字段的属性具有DataType属性..NET Framework中没有类型完全匹配xs:date类型.最接近的匹配是System.DateTime,它存储日期和时间数据.将DataType属性指定为"日期"可确保XmlSerializer仅序列化DateTime对象的日期部分.