【问题标题】:String was not recognized as a valid DateTime (valid UTC format)字符串未被识别为有效的 DateTime(有效的 UTC 格式)
【发布时间】:2015-07-20 07:53:21
【问题描述】:

我正在尝试使用以下节点反序列化 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) 处有错误,该错误直接指向两个时间戳.

我所能找到的关于此错误消息的所有信息似乎都是由格式的错误使用引起的(即日期字符串中使用了错误的特殊字符)。但是,就我而言,格式似乎 100% 符合 MSDN 描述。

谁能帮我指出错误?

【问题讨论】:

  • 您似乎在说 DataType="date" 您希望一个日期 - 但您提供的是一个日期一个时间.如果DataType="dateTime" 会发生什么?

标签: c# xml serialization


【解决方案1】:

尝试在您的属性中使用"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; }

【讨论】:

    【解决方案2】:

    您正在尝试使用无效的 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; }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-12
      • 2011-01-12
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多