• 2023年1月4日

.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"));
        });

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注