Asp.net mvc JSON响应模型中的时间?
我正在使用ASP.NET Web Api 2和Json.NET 6.0.1 根据法律,日期应该以某种方式互换。我正在使用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
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
。这工作用的工具不对