代码之家  ›  专栏  ›  技术社区  ›  Espo

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

  •  12
  • Espo  · 技术社区  · 16 年前

     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>
    

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

    这是可能的,还是我需要在类序列化后拼凑出某种xsl/xpath替换魔法?

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

    2 回复  |  直到 16 年前
        1
  •  24
  •   Matt Howells    14 年前

    将[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); }
    }
    
        2
  •  14
  •   Jeffrey L Whitledge    16 年前

    您可以创建一个字符串属性,该属性执行与时间字段的转换,并将序列化属性放在该字段上,而不是应用程序其余部分使用的real DateTime属性。