【发布时间】:2015-07-28 20:35:55
【问题描述】:
当我序列化时,我所有的日期都将是当地时间,以保持 与读取/写入同一数据库或执行服务器到服务器集成的遗留应用程序的向后兼容性。 但我想为我的消费者的 web api 生成 UTC(ISO 格式)字符串,因为他们可以在我国家的任何地方。 由于我住在巴西,而且这个国家有超过 1 个时区,我确实必须处理这种语言环境混乱。
当我反序列化时,由于向后兼容性,我想将 utc 格式的字符串转换为本地格式。
巴西(巴西时间)在 -03:00 偏移,那么:
当 web api 消费者输入:“...T18:00:00.000Z”时,在 web api 端,DateTime 时间需要变成本地格式的“15:00:00”。
当 Web api 输出完全相同的“15:00:00”DateTime 时,序列化程序应将该时间转换回 utc 格式的“...T18:00:00.000Z”。
如果可能,我想要一个应用程序范围的解决方案,IOW,我不想用自定义的 JsonConverter 装饰每个类或属性
你能给我建议吗?
【问题讨论】:
-
将您自己的转换器添加到 JsonSerializer 的转换器列表中。
-
@Brannon,我想我不再需要这个了,DateTimeZoneHandling.Local 可以解决问题。我使用的是旧版本。我应该添加答案以供将来参考吗?还是这个问题太局限了?
-
@Brannon 在最新版本 7.0.1 中,DateTimeZoneHandling.Local 在本地日期正确读取 18:00Z 到 15:00 并在序列化时正确生成 15:00 到 15:00-03:00 .它采用偏移格式,但适用于我的情况
-
@EProgrammerNotFound:是的,请写下你的解决方案,作为其他有同样问题的人的答案。
-
@EProgrammerNotFound:我只想添加一行如何配置
JsonConvert以使用DateTimeZoneHandling.Local。否则看起来不错。
标签: c# datetime asp.net-web-api json.net locale