首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在使用Json.Net进行序列化时指定自定义DateTime格式

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

Stack Overflow用户
提问于 2013-09-05 19:52:58
回答 7查看 188.5K关注 0票数 168

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

在其中一个应用程序接口中,客户端希望我们以yyyy-MM-dd格式公开日期。我不想为此更改全局设置(例如GlobalConfiguration.Configuration.Formatters.JsonFormatter),因为它非常特定于此客户端。我在为多个客户端开发的解决方案中实现了这一点。

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

例如:

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

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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 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中所示)。

票数 191
EN

Stack Overflow用户

发布于 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

票数 124
EN

Stack Overflow用户

发布于 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重载。

票数 67
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18635599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档