1
This commit is contained in:
@@ -12,9 +12,11 @@ namespace Infrastructure.Converter
|
||||
/// </summary>
|
||||
public class DateTimeNullConverter : JsonConverter<DateTime?>
|
||||
{
|
||||
//该方法用于将 JSON 字符串反序列化为 DateTime? 类型的值。
|
||||
public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
=> string.IsNullOrEmpty(reader.GetString()) ? default : ParseDateTime(reader.GetString());
|
||||
|
||||
//方法用于将 DateTime? 类型的值序列化为 JSON 字符串
|
||||
public override void Write(Utf8JsonWriter writer, DateTime? value, JsonSerializerOptions options)
|
||||
=> writer.WriteStringValue(value?.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss"));
|
||||
}
|
||||
@@ -39,85 +41,47 @@ namespace Infrastructure.Converter
|
||||
}
|
||||
|
||||
//******************************DOAN JSON 转换器处理日期数组****************************************
|
||||
public class DateTimeArrayConverter : JsonConverter<DateTime>
|
||||
public class DateTimeArrayConverter : JsonConverter<IEnumerable<DateTime>>
|
||||
{
|
||||
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
public override IEnumerable<DateTime> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
if (reader.TokenType == JsonTokenType.String)
|
||||
if (reader.TokenType == JsonTokenType.StartArray)
|
||||
{
|
||||
if (DateTime.TryParse(reader.GetString(), out var date))
|
||||
var list = new List<DateTime>();
|
||||
while (reader.Read() && reader.TokenType != JsonTokenType.EndArray)
|
||||
{
|
||||
return date;
|
||||
}
|
||||
}
|
||||
throw new JsonException("Invalid date format");
|
||||
}
|
||||
|
||||
public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
|
||||
{
|
||||
writer.WriteStringValue(value.ToLocalTime().ToString("yyyy-MM-ddTHH:mm:ss"));
|
||||
}
|
||||
}
|
||||
|
||||
public class DateTimeNullableArrayConverter : JsonConverter<DateTime?[]>
|
||||
{
|
||||
public override DateTime?[] Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
if (reader.TokenType != JsonTokenType.StartArray)
|
||||
{
|
||||
throw new JsonException("Expected start of array.");
|
||||
}
|
||||
|
||||
var dates = new List<DateTime?>();
|
||||
|
||||
while (reader.Read())
|
||||
{
|
||||
if (reader.TokenType == JsonTokenType.EndArray)
|
||||
{
|
||||
return dates.ToArray();
|
||||
}
|
||||
|
||||
if (reader.TokenType == JsonTokenType.String)
|
||||
{
|
||||
var dateString = reader.GetString();
|
||||
if (string.IsNullOrEmpty(dateString))
|
||||
if (reader.TokenType == JsonTokenType.String)
|
||||
{
|
||||
dates.Add(null);
|
||||
}
|
||||
else if (DateTime.TryParse(dateString, out var date))
|
||||
{
|
||||
dates.Add(date);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new JsonException($"Invalid date format: {dateString}");
|
||||
var dateTime = ParseDateTime(reader.GetString());
|
||||
if (dateTime != null)
|
||||
{
|
||||
list.Add(dateTime.Value.ToLocalTime()); // 将UTC时间转为本地时间
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new JsonException("Expected string value in array.");
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
throw new JsonException("Unexpected end of JSON.");
|
||||
throw new JsonException();
|
||||
}
|
||||
|
||||
public override void Write(Utf8JsonWriter writer, DateTime?[] value, JsonSerializerOptions options)
|
||||
public override void Write(Utf8JsonWriter writer, IEnumerable<DateTime> value, JsonSerializerOptions options)
|
||||
{
|
||||
writer.WriteStartArray();
|
||||
foreach (var date in value)
|
||||
{
|
||||
if (date.HasValue)
|
||||
{
|
||||
writer.WriteStringValue(date.Value.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss"));
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteNullValue();
|
||||
}
|
||||
writer.WriteStringValue(date.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss"));
|
||||
}
|
||||
writer.WriteEndArray();
|
||||
}
|
||||
|
||||
private static DateTime? ParseDateTime(string dateStr)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(dateStr) && DateTime.TryParse(dateStr, out var dateVal))
|
||||
{
|
||||
return dateVal; // 假设输入的已经是UTC时间
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user