如何序列化为日期时间

dav*_*ine 5 c# datetime xml-serialization .net-2.0

努力获取任何时区的日期时间。我使用 DateTimeOffset、字符串和 XmlElement 属性。当我这样做时,我收到以下错误:

[InvalidOperationException:“dateTime”对于 XmlElementAttribute.DataType 属性来说是无效值。dateTime 无法转换为 System.String。]
System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(TypeModel model、String ns、ImportContext context、String dataType、XmlAttributes a、布尔重复、布尔 openModel、RecursionLimiter 限制器) +450

[InvalidOperationException:反射类型“System.String”时发生错误。]
System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(TypeModel 模型、String ns、ImportContext 上下文、String dataType、XmlAttributes a、布尔重复、布尔 openModel、RecursionLimiter 限制器) +1621
System.Xml.Serialization.XmlReflectionImporter.ImportAccessorMapping(MemberMapping 访问器、FieldModel 模型、XmlAttributes a、String ns、类型 choiceIdentifierType、布尔 rpc、布尔 openModel、RecursionLimiter 限制器) +8750
System.Xml.Serialization.XmlReflectionImporter.ImportFieldMapping(StructModel 父级) 、FieldModel 模型、XmlAttributes a、String ns、RecursionLimiter 限制器)+139
System.Xml.Serialization.XmlReflectionImporter.InitializeStructMembers(StructMapping 映射、StructModel 模型、布尔 openModel、String typeName、RecursionLimiter 限制器)+1273

[InvalidOperationException:反映属性“creationTimeX”时发生错误。] ...

代码:

 [System.Xml.Serialization.XmlElement(ElementName = "creationTime",
      DataType="dateTime")]
 public string creationTimeX
    {
        get
        {
            return this.creationTimeField.ToString("yyyy-MM-ddTHH:mm:sszzz");
        }
        set
        {
            DateTimeOffset.TryParse(value, out this.creationTimeField);
        }
    }

[System.Xml.Serialization.XmlIgnoreAttribute()]
public System.DateTimeOffset creationTime
{
    get {
        return this.creationTimeField;
    }
    set {
        this.creationTimeField = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

Jas*_*son 2

看一下有关序列化日期和 UTC 的 StackOverflow 问题:

.Net Framework 3.5/SQL Server 2008 中日期时间序列化的最佳实践

无需创建特殊属性即可完成序列化。