我如何设置Json.Net序列化器以自定义方式运行

本文关键字:序列化 自定义 运行 方式 Net Json 何设置 设置 | 更新日期: 2023-09-27 18:05:17

序列化时,所有的日期都将作为本地时间,以便维护与读/写相同数据库或执行服务器到服务器集成的遗留应用程序的向后兼容性。但是我想为web api的消费者生成UTC (ISO格式)字符串,因为他们可以在我的国家的任何地方。因为我住在巴西,这个国家有多个时区,所以我必须处理这个混乱的地区。

当我反序列化时,由于向后兼容性,我想将utc格式的字符串转换为本地格式。

巴西时间为-03:00偏移,则:

当web api消费者输入:"…t18:00 . 000z "时,在web api端,DateTime时间需要变成本地格式的"15:00:00"。

当web api输出相同的"15:00:00" DateTime时,序列化器应该将该时间转换回utc格式的"…t18:00 . 000z "。

如果可能的话,我想要一个应用程序范围的解决方案,但是,我不想用自定义JsonConverter来装饰每个类或属性

你能给我一些建议吗?

我如何设置Json.Net序列化器以自定义方式运行

你所描述的是DateTimeZoneHandling.Local的行为,至少在7.0.1版本中是这样,这是当时这个问题得到回答的最新版本。

实际上有一个微小的区别:当DateTime被序列化时,JSonConvert er将以偏移格式[15:00-03:00]而不是UTF格式[18:00Z]产生时间。这是预期的,我相信(至少对我来说是有意义的),因为SerializerSettings中的格式是DateTimeZoneHandling.Local,如果它是DateTimeZoneHandling.Utc,它将产生18:00Z,如预期的那样。

当DateTime被反序列化时,UTC格式的值,如"2015-01-01T18:00:00.000Z",将正确地变为与new DateTime(2015, 1, 1, 15, 0, 0, DateTimeKind.Local)相同。

配置JsonConvert,在WebApiConfigRegister()方法中添加以下代码:

using Newtonsoft.Json;
...
public static void Register(HttpConfiguration config)
{
    var settings = config.Formatters.JSonFormatter.SerializerSettings;
    settings.DateFormatHandling = DateFormatHandling.IsoDateFormat;
    settings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
}

免责声明:测试结果来自-03:00偏移量。(巴西时间)