字符串'3/18/09 10:16 PM'不是有效的AllXsd值

use*_*603 53 c# xml parsing

显然,读者不喜欢从响应XML传入的这种格式.

想知道我是否可以重新格式化.尝试DateTime使用以下代码转换为使用以下代码XmlReader:

reader.ReadContentAsDateTime();
Run Code Online (Sandbox Code Playgroud)

Dav*_*man 99

根据XML 模式规范,日期时间值应该是ISO8601格式,例如,类似于

2009-03-13T22:16:00
Run Code Online (Sandbox Code Playgroud)

  • 在ruby中使用`iso8601`方法,例如`Time.now.iso8601`. (2认同)
  • 出于好奇,ISO8601格式看起来应该像`2009-03-18T22:16:00-05:00`,但David的答案(省略时区)也适合我(而ISO8601格式则不然).这是因为XmlConverter中的本地序列化(因此不需要时区)? (2认同)

Mar*_*ell 51

Xml阅读器通常以非常特定的格式预期日期/时间; 您可以自己使用XmlConvert:

string s = XmlConvert.ToString(DateTime.Now);
DateTime when = XmlConvert.ToDateTime(s);
Run Code Online (Sandbox Code Playgroud)

如果您正在使用其他内容,则必须将其作为字符串读取并使用DateTime.TryParseExact(或类似)指定实际的格式字符串:

string s = reader.ReadContentAsString();
DateTime when = DateTime.ParseExact(s, "M/d/yy hh:mm tt",
     CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

如果您正在使用XmlSerializer,您可以使用垫片属性进行转换 - 让我知道这是您正在做的...

  • @burhan通过查看价值的来源,并妥善处理它?或者,核心框架包括可以做得更好的以RSS为目标的类. (2认同)
  • @burhan解决方案一如既往地拥有xml和匹配的模型.有时这意味着你可以直接进行 - 你可能需要将日期作为字符串类型(而不是DateTime),然后对其进行额外的后处理以解析时间.但是,随机链接不能提供您正在努力解决的确切xml. (2认同)