如何将 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 的正确方法是啥?
ServiceStack Json Serializer 忽略属性