我在.Net中创建了一个Web API,并在下面添加了全局设置:
var jsonSettings = new JsonSerializerSettings();
jsonSettings .Converters.Add(new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-ddTHH:mm:ss.fffZ" });
我总是得到日期格式yyyy-MM-ddTHH:mm:ss.fffZ
,但现在我想改变我的设置,只转换传入而不是传出。例如传入2022-08-22T13:42:27.407Z
和传出2022-08-22 13:42:27
,我移动设置到ActionFilterAttribute
OnActionExecuting,但不工作的权利。日期已经转换(ISO字符串设置2小时差异)时,它到达OnActionExecuting函数。
是否可以更改传出日期格式?
1条答案
按热度按时间fcwjkofz1#
您可以从
IsoDateTimeConverter
继承,因此它会覆写CanRead
以传回false
。完成之后,新的转换子将只适用于写入,而预设的序列化将用于阅读。首先,创建以下转换器:
现在,以下单元测试将通过:
备注:
2022-08-22T13:42:27.407Z
已经是Json.NET对DateTime
对象使用的默认序列化格式,但如果需要更改默认值,可以设置JsonSerializerSettings.DateFormatString
或JsonSerializerSettings.DateTimeZoneHandling
。转换器将用于写入,(修改的)默认值将用于阅读。CanWrite
。DateTime
转换器处理阅读和写入,则可能需要设置JsonSerializerSettings.DateParseHandling = DateParseHandling.None
,以防止JsonTextReader
在调用转换器的ReadJson()
方法之前自动识别和解析它。有关详细信息,请参阅 Json.NET Disable the deserialization on DateTime。演示小提琴here。