我正在开发一个API,以使用ASP.NET Web API公开一些数据。
在一种API中,客户希望我们以yyyy-MM- dd格式显示日期。我不想为此更改全局设置(例如GlobalConfiguration.Configuration.Formatters.JsonFormatter),因为它非常特定于此客户端。我确实在针对多个客户的解决方案中进行了开发。
yyyy-MM- dd
GlobalConfiguration.Configuration.Formatters.JsonFormatter
我能想到的解决方案之一是创建一个自定义JsonConverter,然后将其放入需要进行自定义格式设置的属性中
JsonConverter
例如
class ReturnObjectA { [JsonConverter(typeof(CustomDateTimeConverter))] public DateTime ReturnDate { get;set;} }
只是想知道是否还有其他简单的方法可以做到这一点。
您走在正确的轨道上。既然您说不能修改全局设置,那么第二件事就是JsonConverter按照您的建议按需应用属性。事实证明,Json.Net已经具有内置功能IsoDateTimeConverter,可让您指定日期格式。不幸的是,您不能通过JsonConverter属性设置格式,因为属性的唯一参数是类型。但是,有一个简单的解决方案:将子类化IsoDateTimeConverter,然后在子类的构造函数中指定日期格式。JsonConverter在需要的地方应用属性,指定您的自定义转换器,就可以开始了。这是所需的全部代码:
IsoDateTimeConverter
class CustomDateTimeConverter : IsoDateTimeConverter { public CustomDateTimeConverter() { base.DateTimeFormat = "yyyy-MM-dd"; } }
如果您不介意在那里也没有时间,那么您甚至不需要继承IsoDateTimeConverter。其默认日期格式为yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK(如源代码中所示)。
yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK