在 ASP.NET Core 6 中,可以使用 System.Text.Json.Serialization 命名空间中的 converter 属性将 DateOnly 和 TimeOnly 类型转换为字符串,以便在查询参数中传递。以下是一个示例:
首先在项目的 Startup.cs 文件中添加以下代码:
using System.Text.Json.Serialization;
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
options.JsonSerializerOptions.Converters.Add(new JsonTimeOnlyConverter());
options.JsonSerializerOptions.Converters.Add(new JsonDateOnlyConverter());
});
}
然后,定义以下三个转换器:
using System;
using System.Text.Json;
using System.Text.Json.Serialization;
public class JsonTimeOnlyConverter : JsonConverter
{
public override TimeOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return TimeOnly.Parse(reader.GetString());
}
public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToString());
}
}
public class JsonDateOnlyConverter : JsonConverter
{
public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return DateOnly.Parse(reader.GetString());
}
public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToString());
}
}
public class JsonStringEnumConverter : JsonConverterFactory
{
public override bool CanConvert(Type typeToConvert)
{
return typeToConvert.IsEnum;
}
public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options)
{
var converterType = typeof(JsonStringEnumConverter<>).MakeGenericType(typeToConvert);
return (JsonConverter)Activator.CreateInstance(converterType);
}
}
public class JsonStringEnumConverter : JsonConverter where T : struct, Enum
{
public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return Enum.Parse(reader.GetString(), true