.net core中webapi发送和接受enum值自动转换enum类型
方法1:newtonjson
Startup.cs设置:
services.AddControllers().AddNewtonsoftJson()
模型定义时,给Enum字段加上特性,例如:
public class User
{
public int Id{get;set;}
public string Name{get;set;}
[JsonConverter(typeof(StringEnumConverter))]
public Gender Gender{get;set;}
}
public enum Gender
{
未知,
男,
女
}
方法2:微软自带的System.Text.Json.Serialization;
services.AddControllers()
.AddJsonOptions(opt =>
{
opt.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
})
PS:
使用微软自带的Json时,日期格式转换会出错导致WebApi无法接收带有日期内容的对象,需要自行编写一个日期转换工具(下面部分代码转自https://blog.csdn.net/kukubashen/article/details/123798040)
/// <summary>
/// 设置Json默认DateTime格式化
/// </summary>
public class DateTimeJsonConverter : JsonConverter<DateTime>
{
private readonly string Format;
public DateTimeJsonConverter(string format)
{
Format = format;
}
public override void Write(Utf8JsonWriter writer, DateTime date, JsonSerializerOptions options)
{
writer.WriteStringValue(date.ToString(Format));
}
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return DateTime.ParseExact(reader.GetString(), Format, null);
}
然后Startup.cs中的注入修改为:
services.AddControllers()
.AddJsonOptions(opt =>
{
opt.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
//时间格式化响应
options.JsonSerializerOptions.Converters.Add(new DateTimeJsonConverter("yyyy-MM-dd HH:mm:ss"));
});