.net 不使用毫秒和gmt将DateTime序列化到时间

.net 不使用毫秒和gmt将DateTime序列化到时间,.net,time,xml-serialization,attributes,.net,Time,Xml Serialization,Attributes,我使用XSD文件作为输入创建了一个C#类文件。我的一个属性如下所示: private System.DateTime timeField; [System.Xml.Serialization.XmlElementAttribute(DataType="time")] public System.DateTime Time { get { return this.timeField; } set { this.timeFie

我使用XSD文件作为输入创建了一个C#类文件。我的一个属性如下所示:

 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>
序列化后,文件的内容现在如下所示:

 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>
14:04:02.1661975+02:00
如果属性上有XmlAttributes,是否可以在没有毫秒和GMT值的情况下呈现它

<Time>14:04:02</Time>
14:04:02
这是可能的,还是我需要在类序列化后拼凑出某种xsl/xpath替换魔法

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


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

您可以创建一个字符串属性,该属性将转换为/转换为您的时间字段,并将序列化属性放在该属性上,而不是将其他属性转换为real 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); }
}

我今天也做了同样的事情:)如果我们以后需要反序列化同一个文件,这也会起作用吗?我就是这样解决的。这两个答案我都能接受,但杰弗里是第一个。我能做的最好的事情就是向上投票:)如果你的XSD不会改变,我认为这是最简单的解决方案。看看
“yyyy-MM-dd”
时间字段的正确格式字符串是什么?虽然这个解决方案在开箱即用的情况下对我不起作用,但它确实让我找到了一个可行的解决方案。我必须使用
“HH:mm:ss”
,并且我从
日期字段
像这样获取{返回this.dateField.ToString(“HH:mm:ss”);Uri数据类型也是如此。这是我的问题,我就是这样解决的。[JsonIgnore][XmlIgnore]公共Uri UrlIgnore{get;set;}[JsonProperty(“url”)][XmlElement]公共字符串url{get{return Convert.ToString(UrlIgnore);}set{UrlIgnore=新Uri(值);}