Asp.net mvc JSON响应模型中的时间?

Asp.net mvc JSON响应模型中的时间?,asp.net-mvc,json,asp.net-web-api,json.net,iso8601,Asp.net Mvc,Json,Asp.net Web Api,Json.net,Iso8601,我正在使用ASP.NET Web Api 2和Json.NET 6.0.1 根据法律,日期应该以某种方式互换。我正在使用IsoDateTimeConverter()来实现这一点: config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new IsoDateTimeConverter()); 但是在JSON响应模型中如何返回“一天中的时间” 我在ISO规范中找不到与此相关的任何内容 时间是否应该作为一种形式返回: T

我正在使用ASP.NET Web Api 2和Json.NET 6.0.1

根据法律,日期应该以某种方式互换。我正在使用
IsoDateTimeConverter()
来实现这一点:

config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
但是在JSON响应模型中如何返回“一天中的时间”

我在ISO规范中找不到与此相关的任何内容

时间是否应该作为一种形式返回:

  • TimeSpan
    ?(希望用户不要将其用作持续时间表示)
  • DateTime
    ?(期望用户删除日期部分)
  • 自定义
    时间

    • JSON中没有包含日期或时间的标准结构(请参阅)。日期时间值的实际标准是使用ISO 8601格式的字符串,如您所述。但由于没有官方标准,这实际上取决于什么最适合您和API的消费者

      使用
      DateTime
      对象是一个合理的选择,因为Json.Net和其他序列化程序已经支持将这些字符串转换为ISO 8601字符串。所以这是最容易实现的。然而,正如您所说,API的用户必须知道忽略日期部分。您可以将日期设置为0001-01-01以强调其无关性。这与更常见的情况没有太大区别,在这种情况下,API中只需要一个日期,时间并不重要。在这种情况下,大多数人只是把时间定在午夜,然后放手。但是,我同意这种方法确实有一点“代码味道”,因为部分值只是噪音

      也许一个更简洁的方法是将
      DateTime
      值格式化为ISO 8601,但在返回日期部分之前将其切掉。因此,API的用户将得到一个类似于
      14:35:28.906Z
      的字符串。您可以编写一个简单的
      JsonConverter
      ,在序列化期间为您处理此问题。这会给您带来两方面的好处——一个更干净的API,但您仍然可以在内部使用熟悉的
      DateTime
      struct

      自定义的
      Time
      类也可以在这里工作,但根据具体情况,这可能会有些过头。如果您确实需要去那里,您可能希望查看第三方库,例如,它已经为这类东西构建了类,并且还为Json.Net预构建了转换器

      我绝对不会为此选择
      TimeSpan
      。这工作用的工具不对