asp.net 将IsoDateTimeConverter应用于传入请求

dwbf0jvd  于 2022-11-19  发布在  .NET
关注(0)|答案(1)|浏览(134)

我在.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函数。
是否可以更改传出日期格式?

fcwjkofz

fcwjkofz1#

您可以从IsoDateTimeConverter继承,因此它会覆写CanRead以传回false。完成之后,新的转换子将只适用于写入,而预设的序列化将用于阅读。
首先,创建以下转换器:

public class WriteOnlyIsoDateTimeConverter : IsoDateTimeConverter
{
    public override bool CanRead => false;
}

现在,以下单元测试将通过:

var json = @"""2022-08-22T13:42:27.407Z""";

var jsonSettings = new JsonSerializerSettings();
jsonSettings.Converters.Add(new WriteOnlyIsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" });

var dateTime = JsonConvert.DeserializeObject<DateTime>(json, jsonSettings);

var json2 = JsonConvert.SerializeObject(dateTime, jsonSettings);

Assert.AreEqual(@"""2022-08-22 13:42:27""", json2);

备注:

演示小提琴here

相关问题