将DateTime序列化为无毫秒和gmt的时间

时间:2020-03-06 14:25:45  来源:igfitidea点击:

我已经通过使用XSD文件作为输入创建了Cclass文件。我的其中一个属性如下所示:

private System.DateTime timeField;

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

序列化后,文件内容现在如下所示:

<Time>14:04:02.1661975+02:00</Time>

在属性上具有XmlAttributes,是否可以像这样不使用毫秒和GMT值来呈现它?

<Time>14:04:02</Time>

这是可能的,还是在序列化后我需要一起破解某种xsl / xpath-replace-magic?

这不是将对象更改为String的解决方案,因为它在应用程序的其余部分中像DateTime一样使用,并允许我们使用XmlSerializer.Serialize()方法从对象创建xml表示形式。

我需要从字段中删除额外信息的原因是接收系统不符合时间数据类型的w3c标准。

解决方案

我们可以创建一个字符串属性来执行与timeField字段之间的转换,并在其上放置序列化属性,而不是应用程序其余部分使用的实际DateTime属性。

将[XmlIgnore]放在"时间"属性上。

然后添加一个新属性:

[XmlElement(DataType="string",ElementName="Time")]
public String TimeString
{
    get { return this.timeField.ToString("yyyy-MM-dd"); }
    set { this.timeField = DateTime.ParseExact(value, "yyyy-MM-dd", CultureInfo.InvariantCulture); }
}