如何将 Json Serializer 配置为在 web api 中为输入和输出参数提供单独的日期转换器?

Posted

技术标签:

【中文标题】如何将 Json Serializer 配置为在 web api 中为输入和输出参数提供单独的日期转换器?【英文标题】:How to configure Json Serializer to have separate date converters for input and output parameters in web api? 【发布时间】:2018-06-23 21:08:43 【问题描述】:

我正在开发 web api,我需要让 Json 序列化程序仅将日期输入参数转换为 UTC 格式。

现在我正在使用此代码进行转换:

 IsoDateTimeConverter converter = new IsoDateTimeConverter
        
            DateTimeStyles = DateTimeStyles.AdjustToUniversal,
        ;

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

以上配置将在输入输出日期参数上实现。

如何配置我的 web api 有两个日期转换器,一个用于输入参数,另一个用于输出参数?

PS:

我想将日期输入参数转换为 utc 但输出参数转换为 ISO 8601

【问题讨论】:

【参考方案1】:

我想到的最简单的解决方案是创建自定义 DateTime 转换器,它继承自 IsoDateTimeConverter 并覆盖 CanWrite 属性,以便它始终返回 false。在这种情况下,转换器将仅用于反序列化输入,从不用于序列化输出:

public class InputUniversalConverter : IsoDateTimeConverter

    public override bool CanWrite => false;

    public InputUniversalConverter()
    
        DateTimeStyles = DateTimeStyles.AdjustToUniversal;
    


config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new InputUniversalConverter());

【讨论】:

但是如何转换成 ISO 8601? 如果不进行任何自定义,DateTime 将被序列化为2018-01-15T12:23:19.9056547+03:00。您要的是这种格式吗?

以上是关于如何将 Json Serializer 配置为在 web api 中为输入和输出参数提供单独的日期转换器?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JSON.serializer 在 Swift 中解析 JSON

在 Dart 中使用 json_serializer 将映射序列化为 JSON 的正确方法是啥?

用于深层嵌套对象的自定义Json Serializer

ServiceStack Json Serializer 忽略属性

如何将 Tomcat 配置为在登录后始终定向到 index.jsp?

如何将 gnome 配置为在锁定屏幕上仅使用一种特定的键盘布局?