This commit is contained in:
yang.lee
2023-10-27 17:16:31 +08:00
27 changed files with 918 additions and 176 deletions

View File

@@ -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;
}
}
}
}