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)
看一下有关序列化日期和 UTC 的 StackOverflow 问题:
.Net Framework 3.5/SQL Server 2008 中日期时间序列化的最佳实践
无需创建特殊属性即可完成序列化。