.NetCore自动转换枚举类显示自定义中文名称
2021-04-23 15:28
标签:omd 返回 arguments read efault class 方法 枚举类 引用 通常我们在定义枚举类时,可能使用数字或者英文,但在界面显示的时候又希望显示中文,我总结了以下两种方法 (1)显示自定义的枚举名称: 我使用Newtonsoft.Json提供的JsonConverter方法,以实现WebAPI在返回Json时对枚举类进行自动转换。 新增如下转换器方法: 在模型类(或视图模型类)中定义: 注意JsonConverter(typeof(JsonCustomDateTimeConverter))这个属性标签,就是告诉框架如何转换。 (2)从数据库中存储的枚举int值转换为枚举名称: Newtonsoft.Json库默认提供了一个转换器,叫StringEnumConverter,使用方法和上面类似,只不过写成JsonConverter(typeof(StringEnumConverter)),效果是会显示定义的枚举,例如None、Waiting……如果你直接以中文定义枚举值,也可以和方法一达到一样的效果。 注意以上方法需引用包Newtonsoft.Json .NetCore自动转换枚举类显示自定义中文名称 标签:omd 返回 arguments read efault class 方法 枚举类 引用 原文地址:https://www.cnblogs.com/cdoneiX/p/12239424.html public enum WorkFlowProcessState
{
[Display(Name = "未启动")]
None = 0,
[Display(Name = "等待中")]
Waiting,
[Display(Name = "处理中")]
Processing,
[Display(Name = "已通过")]
Passed,
[Display(Name = "未通过")]
UnPassed,
[Display(Name = "已禁用")]
Disabled,
[Display(Name = "已撤销")]
Canceled
}
public class JsonEnumDisplayConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
try
{
var t = value.GetType().GetFields().SingleOrDefault(w => w.Name == value.ToString()).CustomAttributes.SingleOrDefault(w => w.AttributeType == typeof(DisplayAttribute));
if (t != null)
{
writer.WriteValue(t.NamedArguments[0].TypedValue.Value.ToString());
}
else
{
writer.WriteValue(value.ToString());
}
}
catch
{
writer.WriteValue("");
}
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException("Unnecessary because CanRead is false. The type will skip the converter.");
}
public override bool CanRead => false;
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
}
[Display(Name = "审批状态"),JsonConverter(typeof(JsonEnumDisplayConverter))]
public WorkFlowProcessState PROCESS_STATE { get; set; }
上一篇:安装nodejs