在C#中序列化没有GMT的日期时间

时间:2010-07-23 04:49:12

标签: c# datetime formatting attributes xml-serialization

我已经从xsd生成了类,并希望序列化DateTime。 我的班级看起来像

private System.DateTime timeGMT; 

 [System.Xml.Serialization.XmlElementAttribute(DataType="time")] 
 public System.DateTime TimeGMT { 
     get { 
         return this.timeGMT; 
     } 
     set { 
         this.timeGMT= value; 
     } 
 }

但是,当我分配任何DateTime对象时,它将格式化为

<TimeGMT>12:00:00.0000000-04:00</TimeGMT>

但我希望它被序列化为

<TimeGMT>12:00:00</TimeGMT>

我看了一下这个问题:

Serializing DateTime to time without milliseconds and gmt

这与我的情况类似。 但我的问题是我还想验证生成的xml对xsd。所以我无法将返回类型转换为字符串。 (如果我使用String作为返回类型,那么在生成XML时会出现异常

time is an invalid value for XMLElementAttribute.DataType property.The property may be specified for only primitive types.

还有其他方法吗? 提前谢谢。

2 个答案:

答案 0 :(得分:0)

您链接问题的解决方案就是您需要做的事情。您仍然可以针对XSD验证生成的XML,但XSD不应将此元素定义为XML datetime类型(因为这是具有毫秒和时区的那个,您说您不需要)。相反,您必须定义与您想要的匹配的XSD类型。

答案 1 :(得分:0)

我没有更改XML模式,因为它被用作标准。我删除了

[System.Xml.Serialization.XmlElementAttribute(DataType="time")]  

来自我的班级并使用

中建议的解决方案

Serializing DateTime to time without milliseconds and gmt