前端传输时间类型数据处理
前端传输数据过来,如果时间类型的数据为空或者为null ,那就自动将时间转变换成当前的时间,如果时间类型不正确,那就自动转换时间类型
JsonStringDateTimeConverter
C
/// <summary>
/// 时间转换器:将 JSON 中的时间字符串解析为 DateTime,并格式化为 yyyy-MM-dd HH:mm:ss 输出。
/// 若值为 null 或空字符串,则自动赋值为当前 UTC 时间。
/// </summary>
public class JsonStringDateTimeConverter : JsonConverter<DateTime>
{
private readonly string _format = "yyyy-MM-dd HH:mm:ss";
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
// 1. 处理 JSON null 值
if (reader.TokenType == JsonTokenType.Null)
return DateTime.UtcNow;
// 2. 获取字符串值
var str = reader.GetString();
if (string.IsNullOrEmpty(str))
return DateTime.UtcNow;
// 3. 按指定格式解析
if (DateTime.TryParseExact(str, _format, CultureInfo.InvariantCulture, DateTimeStyles.None, out var dt))
return dt;
// 4. 如果格式不匹配,尝试宽松解析(兼容 ISO 8601 等)
if (DateTime.TryParse(str, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
return dt;
// 5. 如果完全无法解析,抛出明确异常(或可返回默认值)
throw new JsonException($"无法解析日期时间字符串: '{str}',期望格式: {_format}");
}
public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToString(_format));
}
}Program.cs
C
#region 时间配置
// 全局配置方式
builder.Services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new JsonStringDateTimeConverter());
});
#endregion