c# - 使用 Json.Net 序列化时指定自定义 DateTime 格式

标签 c# datetime asp.net-web-api json.net

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

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

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

例如

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

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

最佳答案

您走在正确的轨道上。既然你说你不能修改全局设置,那么下一个最好的办法就是按照你的建议在需要的基础上应用 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 中所示)。

关于c# - 使用 Json.Net 序列化时指定自定义 DateTime 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18635599/

相关文章:

c# - 除非打开 diff 工具,否则 ApprovalTests DiffReporter 不会弹出 diff 窗口

c# - MVVM ComboBox SelectedIndex 与 SelectedItem

javascript - React 中的内联函数未运行

python - 无法对 datetime.time 对象进行 groupby pd.Grouper

sql-server - 将格式为 yyyy-MM-ddTHH :mm:ss. ffffffZ 的字符串时间戳转换为 SQL Server 日期时间而不更改时区

entity-framework - 应用程序架构 mvc4 ef5

c# - 是否存在 finally block 不被执行的情况?

c# - PHP 和 C# MD5 crypt 没有给出相同的输出?

.net - WCF 与 REST API?

c# - ASP.NET 网络 API : How to create a persistent collection across requests?