小编典典

使用Json.Net进行序列化时指定自定义DateTime格式

c#

我正在开发一个API,以使用ASP.NET Web API公开一些数据。

在一种API中,客户希望我们以yyyy-MM- dd格式显示日期。我不想为此更改全局设置(例如GlobalConfiguration.Configuration.Formatters.JsonFormatter),因为它非常特定于此客户端。我确实在针对多个客户的解决方案中进行了开发。

我能想到的解决方案之一是创建一个自定义JsonConverter,然后将其放入需要进行自定义格式设置的属性中

例如

class ReturnObjectA 
{
    [JsonConverter(typeof(CustomDateTimeConverter))]
    public DateTime ReturnDate { get;set;}
}

只是想知道是否还有其他简单的方法可以做到这一点。


阅读 362

收藏
2020-05-19

共1个答案

小编典典

您走在正确的轨道上。既然您说不能修改全局设置,那么第二件事就是JsonConverter按照您的建议按需应用属性。事实证明,Json.Net已经具有内置功能IsoDateTimeConverter,可让您指定日期格式。不幸的是,您不能通过JsonConverter属性设置格式,因为属性的唯一参数是类型。但是,有一个简单的解决方案:将子类化IsoDateTimeConverter,然后在子类的构造函数中指定日期格式。JsonConverter在需要的地方应用属性,指定您的自定义转换器,就可以开始了。这是所需的全部代码:

class CustomDateTimeConverter : IsoDateTimeConverter
{
    public CustomDateTimeConverter()
    {
        base.DateTimeFormat = "yyyy-MM-dd";
    }
}

如果您不介意在那里也没有时间,那么您甚至不需要继承IsoDateTimeConverter。其默认日期格式为yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK(如源代码中所示)。

2020-05-19