.NET Core 2.1:JsonConvert反序列化DateTimeOffset为DateTime时忽略时区转换
.NET Core 2.1:反序列化带时区的日期字符串到DateTime时忽略时区转换
问题场景
执行以下代码获取本地时区的DateTimeOffset:
Console.WriteLine(DateTimeOffset.Now);
返回结果示例:7/25/2023 6:32:37 PM +02:00(本地时间+时区偏移量)。
在将带时区的日期字符串反序列化为DateTime类型时,出现了时区自动转换的问题:
- 当输入字符串为
"2023-07-25T18:32:37+02:00"时,反序列化结果符合预期(7/25/2023 6:32:37 PM); - 当输入字符串为
"2023-07-25T18:32:37+00:00"时,结果被自动转换为本地时区时间7/25/2023 8:32:37 PM,而期望保留原字符串中的18:32:37时分秒,不进行时区转换。
测试代码如下:
class Test { public DateTime departure; } class Program { static void Main(string[] args) { var testObj = JsonConvert.DeserializeObject<Test>( "{\"departure\":\"2023-07-25T18:32:37+00:00\"}", new JsonSerializerSettings() { DateTimeZoneHandling = DateTimeZoneHandling.Unspecified, DateParseHandling = DateParseHandling.None }); Console.WriteLine(testObj.departure); // 输出:7/25/2023 8:32:37 PM(不符合预期) } }
解决方案
自定义Json转换器忽略时区转换
通过实现自定义JsonConverter,直接提取日期字符串中的原始时分秒信息,跳过时区转换逻辑:
- 定义自定义转换器:
public class IgnoreTimezoneDateTimeConverter : JsonConverter<DateTime> { public override DateTime ReadJson(JsonReader reader, Type objectType, DateTime existingValue, bool hasExistingValue, JsonSerializer serializer) { if (reader.Value is string dateStr && DateTimeOffset.TryParse(dateStr, out var dto)) { // 返回原始时间值,Kind标记为Unspecified return dto.DateTime; } // 兼容其他日期格式的 fallback 处理 return serializer.Deserialize<DateTime>(reader); } public override void WriteJson(JsonWriter writer, DateTime value, JsonSerializer serializer) { serializer.Serialize(writer, value); } }
- 在反序列化时使用该转换器:
var testObj = JsonConvert.DeserializeObject<Test>( "{\"departure\":\"2023-07-25T18:32:37+00:00\"}", new JsonSerializerSettings() { Converters = new List<JsonConverter> { new IgnoreTimezoneDateTimeConverter() } }); Console.WriteLine(testObj.departure); // 输出:7/25/2023 6:32:37 PM(符合预期)
原配置失效原因说明
DateParseHandling.None:该配置仅会让Json.NET不自动将日期字符串解析为日期类型,但由于目标字段是DateTime,框架仍会强制解析,因此无法生效。DateTimeZoneHandling.Unspecified:该配置会将带时区的日期转换为本地时区时间,再将DateTime.Kind标记为Unspecified,因此会出现时区转换的问题。
内容的提问来源于stack exchange,提问作者jasmin
相关产品推荐
相关产品推荐

