using System.Text.Json;
using System.Text.Json.Serialization;
namespace Yi.Framework.Core.Json;
///
/// DateTime JSON序列化转换器
///
public class DatetimeJsonConverter : JsonConverter
{
private readonly string _dateFormat;
///
/// 初始化DateTime转换器
///
/// 日期格式化字符串,默认为yyyy-MM-dd HH:mm:ss
public DatetimeJsonConverter(string format = "yyyy-MM-dd HH:mm:ss")
{
_dateFormat = format;
}
///
/// 从JSON读取DateTime值
///
/// JSON读取器
/// 目标类型
/// JSON序列化选项
/// DateTime值
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType == JsonTokenType.String)
{
return DateTime.TryParse(reader.GetString(), out DateTime dateTime)
? dateTime
: reader.GetDateTime();
}
return reader.GetDateTime();
}
///
/// 将DateTime写入JSON
///
/// JSON写入器
/// DateTime值
/// JSON序列化选项
public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToString(_dateFormat));
}
}