如何配置 web api 的 json 序列化器将日期时间转换为 ISO 8601 格式?

Posted

技术标签:

【中文标题】如何配置 web api 的 json 序列化器将日期时间转换为 ISO 8601 格式?【英文标题】:How to configure web api's json serializer to convert date time into ISO 8601 format? 【发布时间】:2018-06-23 04:49:06 【问题描述】:

我正在开发 web api 项目,在我的 WebApiConfig 类中,我添加了此配置以将日期时间参数转换为 ISO 8601 格式:

  IsoDateTimeConverter converter = new IsoDateTimeConverter
        
            //DateTimeStyles = DateTimeStyles.AdjustToUniversal,
            DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'"
        ;

     config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(converter);

但是如果我从前端传入这个值 2018-01-21T21:00:00.000Z 它不会正确地将它转换成 2018-01-22 00:00 :00.000

那么,我的配置有什么问题?

【问题讨论】:

为什么会转换成那个日期?你传入一个带有时区(zulu,又名 UTC)的 DateTime 字符串。 【参考方案1】:

不需要使用IsoDateTimeConverter 就可以了:

var strDate = Convert.ToDateTime("2018-01-21T21:00:00.000Z").ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'", System.Globalization.CultureInfo.InvariantCulture);

它会给你2018-01-22T00:30:00.000Z,因为我测试了你的字符串格式。

但您可以更改格式;ike "yyyy'-'MM'-'dd' 'HH':'mm':'ss"

【讨论】:

感谢回复,但我想全局配置json序列化器

以上是关于如何配置 web api 的 json 序列化器将日期时间转换为 ISO 8601 格式?的主要内容,如果未能解决你的问题,请参考以下文章

如何手动反序列化 JSON 并像 Web API 那样自动验证模型?

ASP.NET Web API:JSON 序列化循环引用

编写一个包装器将现有的 REST API 公开为 SOAP Web 服务?

如何使用 django-rest-framework 中的序列化器将相似数据合并到自定义字段中?

如何在 ASP.NET Web API 中为 Json.NET 设置自定义 JsonSerializerSettings?

C# web api返回类型设置为json的两种方法