使用Json.NET反序列化时忽略UTC偏移

时间:2016-05-19 09:08:59

标签: json.net asp.net-web-api2

我用ASP.NET Web API 2编写了一个接收日期的REST端点。后端系统没有UTC时间或DST的概念,存储在数据库中的日期只是英国的日期和时间。

然而,馈送端点的网站在发送到端点的数据中包括UTC偏移值(例如,日期看起来像“1939-01-08T00:00:00 + 01:00”)。这种情况发生在冬季进入夏季日期,反之亦然(因为夏令时调整)。

我是否可以将JSON解串器设置为完全忽略那些UTC偏移值?我查看了文档here和示例here,并尝试了所有不同的枚举选项,但它们都没有给我我正在寻找的行为。

1 个答案:

答案 0 :(得分:0)

如果日期解析没有按照您想要的方式工作,您可以将其关闭并使用自定义JsonConverter来处理日期。

这是一个应该完成工作的转换器:

fragmentManager.beginTransaction().add(R.id.fragment_container, editStudent, "editStudent" ).commit();

要将此转换器安装到Web API管道中,请在class OffsetIgnoringDateConverter : JsonConverter { public override bool CanConvert(Type objectType) { return (objectType == typeof(DateTime) || objectType == typeof(DateTime?)); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { string rawDate = (string)reader.Value; if (rawDate == null) return existingValue; if (rawDate.Length > 19) rawDate = rawDate.Substring(0, 19); DateTime date = DateTime.ParseExact(rawDate, "yyyy'-'MM'-'dd'T'HH':'mm':'ss", CultureInfo.CurrentCulture, DateTimeStyles.AssumeLocal); return date; } public override bool CanWrite { get { return false; } } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { throw new NotImplementedException(); } } 中的Application_Start()方法中添加以下内容:

Global.asax

这是一个演示(控制台应用):https://dotnetfiddle.net/kt9pFl