diff --git a/apihost/Tnb.API.Entry/Extensions/ConfigureMvcControllerExtensions.cs b/apihost/Tnb.API.Entry/Extensions/ConfigureMvcControllerExtensions.cs index f783c29d..4a984aa6 100644 --- a/apihost/Tnb.API.Entry/Extensions/ConfigureMvcControllerExtensions.cs +++ b/apihost/Tnb.API.Entry/Extensions/ConfigureMvcControllerExtensions.cs @@ -1,4 +1,5 @@ -using JNPF; +using System.Globalization; +using JNPF; using JNPF.Common.Core.Filter; using JNPF.Common.Options; using JNPF.EventHandler; @@ -48,7 +49,8 @@ public static class ConfigureMvcControllerExtensions options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; // 格式化json输出的日期格式为时间戳 - options.SerializerSettings.Converters.Add(new NewtonsoftDateTimeJsonConverter()); + // options.SerializerSettings.Converters.Add(new NewtonsoftDateTimeJsonConverter()); + options.SerializerSettings.Converters.Add(new MyNewtonsoftDateTimeJsonConverter());//zhoukeda 2023.10.24 }); services.AddUnifyJsonOptions("special", new JsonSerializerSettings @@ -123,4 +125,41 @@ public static class ConfigureMvcControllerExtensions return services; } + + public class MyNewtonsoftDateTimeJsonConverter : NewtonsoftDateTimeJsonConverter + { + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + bool flag = NewtonsoftDateTimeJsonConverter.IsNullable(objectType); + if (reader.TokenType == JsonToken.Null || string.IsNullOrEmpty(reader.Value.ToString())) + { + if (!flag) + throw new JsonSerializationException(string.Format((IFormatProvider) CultureInfo.InvariantCulture, "Cannot convert null value to {0}.", (object) objectType)); + return (object) null; + } + long result = 0; + if (reader.TokenType == JsonToken.Integer) + result = (long) reader.Value; + else if (reader.TokenType == JsonToken.String) + { + if (!long.TryParse((string) reader.Value, out result)) + return (object) Convert.ToDateTime(reader.Value.ToString()); + return reader.TokenType == JsonToken.Date ? reader.Value : throw new JsonSerializationException(string.Format((IFormatProvider) CultureInfo.InvariantCulture, "Unexpected token parsing date. Expected Integer or String, got {0}.", (object) reader.TokenType)); + } + if (result < 0L) + return (object) DateTime.Now; + try + { + DateTime dt = Convert.ToDateTime(reader.Value.ToString()); + return dt; + } + catch (Exception e) + { + DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(result); + dateTimeOffset = dateTimeOffset.ToLocalTime(); + DateTime dateTime = dateTimeOffset.DateTime; + return (flag ? Nullable.GetUnderlyingType(objectType) : objectType) == typeof (DateTimeOffset) ? (object) new DateTimeOffset(dateTime, TimeSpan.Zero) : (object) dateTime; + } + } + } } \ No newline at end of file