我正在开发一个应用程序接口,以使用ASP.NET Web API公开一些数据。
在其中一个应用程序接口中,客户端希望我们以yyyy-MM-dd
格式公开日期。我不想为此更改全局设置(例如GlobalConfiguration.Configuration.Formatters.JsonFormatter
),因为它非常特定于此客户端。我在为多个客户端开发的解决方案中实现了这一点。
我能想到的一种解决方案是创建一个自定义JsonConverter
,然后将其放入我需要进行自定义格式设置的属性中
例如:
class ReturnObjectA
{
[JsonConverter(typeof(CustomDateTimeConverter))]
public DateTime ReturnDate { get;set;}
}
我只是想知道是否有其他简单的方法可以做到这一点。
发布于 2013-09-05 23:03:58
你在正确的轨道上。既然您说不能修改全局设置,那么下一个最好的方法就是按照您的建议,根据需要应用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
(如source code中所示)。
发布于 2017-07-04 04:30:02
您可以使用此方法:
public class DateFormatConverter : IsoDateTimeConverter
{
public DateFormatConverter(string format)
{
DateTimeFormat = format;
}
}
并这样使用它:
class ReturnObjectA
{
[JsonConverter(typeof(DateFormatConverter), "yyyy-MM-dd")]
public DateTime ReturnDate { get;set;}
}
DateTimeFormat
字符串使用此处描述的.NET格式字符串语法:https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings
发布于 2016-03-23 17:31:06
也可以使用IsoDateTimeConverter
实例完成此操作,而无需更改全局格式设置:
string json = JsonConvert.SerializeObject(yourObject,
new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" });
它使用接受params JsonConverter[]
参数的JsonConvert.SerializeObject
重载。
https://stackoverflow.com/questions/18635599
复制相似问题