【问题标题】:Controlling DateTime format for XML responses in Web API控制 Web API 中 XML 响应的 DateTime 格式
【发布时间】:2015-01-11 17:57:03
【问题描述】:

当内容被请求为application/xml 时,如何控制DateTime 的输出格式?以下适用于 JSON:

 JsonMediaTypeFormatter jsonFormatter = config.Formatters.JsonFormatter;
 jsonFormatter.SerializerSettings = new JsonSerializerSettings {
     DateFormatString = "yyyy-MM-dd" };

XmlMediaTypeFormatter 的等价物是什么?

更新: 从语义上讲,我的数据没有时间信息。从技术上讲,我想 a) 最小化有效负载 b) 简化消耗(无需在客户端处理/格式化)c) 无论要求的格式如何,都能获得一致的响应。

【问题讨论】:

  • 你想把它改成什么,为什么? XML 已经有明确定义的日期和时间格式 (ISO-8601) - 您应该坚持使用它。不要忘记这是机器可读,而不是针对最终用户。 (JSON 也是如此——我强烈反对在 JSON 中使用 MM/dd/yyyy。)
  • 不幸的是,底层数据库使用 datetime 数据类型存储日期。 C# 也没有仅日期类型,对吧?我的前端只需要日期部分。
  • 为什么这意味着您需要在 XML 中使用非标准格式?这是不合逻辑的,IMO。 (顺便说一句,您可能想查看我的Noda Time 项目以了解更多类型的日期/时间类型,包括“仅日期”-但这不会改变使用美国是否是个好主意-以 XML 为中心的日期格式...)
  • 对不起,如果我让自己不清楚。我的观点是不要使用美国日期格式。关键是在响应中省略 C# DateTime 类型的时间部分。我为 JSON 制作了它,并希望在 XML 中获得相同的结果以实现一致性。
  • 对,那你要使用yyyy-MM-dd吗?您强制 JSON 使用以美国为中心的格式的代码示例令人困惑。我怀疑可能有一个 XML 序列化属性专门说“这只是一个日期”,此时您不需要指定格式...

标签: .net datetime serialization asp.net-web-api xml-serialization


【解决方案1】:

您不应该指定自己的格式 - 您应该告诉 XML 序列化器该值只是一个日期,使用:

[XmlElement(DataType="date")]

然后强制使用带有config.Formatters.XmlFormatter.UseXmlSerializer = true 的XML 序列化程序,你应该没问题。这样,您将使用标准 (ISO-8601) 日期格式,即yyyy-MM-dd...,这意味着标准工具(例如 LINQ to XML)将能够适当地解析 XML。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 2016-06-26
    相关资源
    最近更新 更多