字符串无法识别为有效的日期时间(有效的UTC格式)

4

我正在尝试反序列化一个包含以下节点的XML对象:

<startTime>2012-03-19T11:31:03.000Z</startTime>
<endTime>2012-03-19T11:31:03.000Z</endTime>

以下是我用来将XML反序列化为类的属性:

[System.Xml.Serialization.XmlElementAttribute(DataType = "date", ElementName = "startTime")]
public DateTime StartTime { get; set; }

[System.Xml.Serialization.XmlElementAttribute(DataType = "date", ElementName = "endTime")]
public DateTime EndTime { get; set; }

最后,这是我用来反序列化XML的代码:

Stream resultStream = await response.Content.ReadAsStreamAsync();
var serializer = new XmlSerializer(typeof(T));
return serializer.Deserialize(resultStream) as T;

然而,代码会抛出一个异常,告诉我该字符串不能被识别为有效的DateTime对象 - 基本异常表示XML文件在(1,1926)处存在错误,直接指向两个时间戳。
我所能找到的关于这个错误信息的所有内容都是由格式不正确引起的(即日期字符串中使用了错误的特殊字符)。但是,在我的情况下,该格式似乎完全符合MSDN的描述。
有人可以帮助我指出错误吗?

3
你似乎是在说 DataType="date" 表示你只期望获得日期,然而你提供了日期和时间。如果 DataType="dateTime" 会发生什么? - Damien_The_Unbeliever
2个回答

4

尝试在您的属性中使用"dateTime"DataType(注意大小写:以小写d开头):

[System.Xml.Serialization.XmlElementAttribute(DataType = "dateTime", ElementName = "startTime")]
public DateTime StartTime { get; set; }

[System.Xml.Serialization.XmlElementAttribute(DataType = "dateTime", ElementName = "endTime")]
public DateTime EndTime { get; set; }

1
您正在尝试使用无法正常工作的Time格式反序列化DateTime。但是,由于DataType是字符串,因此在编译时不会收到错误消息。
您应该尝试:
[System.Xml.Serialization.XmlElementAttribute(DataType = "dateTime", ElementName = "startTime")]
public DateTime StartTime { get; set; }

[System.Xml.Serialization.XmlElementAttribute(DataType = "dateTime", ElementName = "endTime")]
public DateTime EndTime { get; set; }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接