.NetCore自动转换枚举类显示自定义中文名称

通常我们在定义枚举类时,可能使用数字或者英文,但在界面显示的时候又希望显示中文,我总结了以下两种方法

(1)显示自定义的枚举名称:

    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
    }

我使用Newtonsoft.Json提供的JsonConverter方法,以实现WebAPI在返回Json时对枚举类进行自动转换。 新增如下转换器方法:

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; }

注意JsonConverter(typeof(JsonCustomDateTimeConverter))这个属性标签,就是告诉框架如何转换。

(2)从数据库中存储的枚举int值转换为枚举名称:

Newtonsoft.Json库默认提供了一个转换器,叫StringEnumConverter,使用方法和上面类似,只不过写成JsonConverter(typeof(StringEnumConverter)),效果是会显示定义的枚举,例如None、Waiting……如果你直接以中文定义枚举值,也可以和方法一达到一样的效果。

注意以上方法需引用包Newtonsoft.Json

原文地址:https://www.cnblogs.com/cdoneiX/p/12239424.html

时间: 2024-10-29 10:00:35

.NetCore自动转换枚举类显示自定义中文名称的相关文章

Java文件编码自动转换工具类

本篇随笔主要介绍了一个用java语言写的将一个文件编码转换为另一个编码并不改变文件内容的工具类: 通过读取源文件内容,用URLEncoding重新编码解码的方式实现. 1 public class ChangeFileEncoding { 2 public static int fileCount = 0; 3 public static String sourceFileRoot = "替换为要转换的源文件或源目录"; // 将要转换文件所在的根目录 4 public static

java 28 - 4 JDK5的新特性 之 枚举的概述和自定义枚举类

枚举 枚举概述 是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内.举例:一周只有7天,一年只有12个月等. 回想单例设计模式:单例类是一个类只有一个实例 那么多例类就是一个类有多个实例,但不是无限个数的实例,而是有限个数的实例.这才能是枚举类. 自定义枚举类. 第一版:无参构造 1 public class Direction { 2 // 创建几个实例 3 public static final Direction FRONT = new Direction(); 4 public

C# DropDownList 绑定枚举类

第一种 DropDownList_Franchiser_Type.DataSource = ListTypeForEnum(); DropDownList_Franchiser_Type.DataValueField = "value"; DropDownList_Franchiser_Type.DataTextField = "text"; DropDownList_Franchiser_Type.DataBind() //转换枚举类 public static

FastJson转换自定义枚举类

在项目中有些状态需要采用枚举类型,在数据库中保存的是name(英文),而前台需要显示的是text(中文). 所以这就需要自己去实现序列. 例如对象: import java.util.Date; import java.util.List; import com.alibaba.fastjson.annotation.JSONField; public class Project { /** * * 审核状态 */ @JSONField(name = "auditStatus") pr

zend framework获取数据库中枚举类enum的数据并将其转换成数组

在model中建立这样的模型,在其中写入获取枚举类的方法 class Student extends Zend_Db_Table{ protected $_name ='student'; protected $_primary ='id'; function getPartyEnum($enumname){ //适配器并获取数据 $db = $this->getAdapter(); $db->query("SET NAMES GBK"); $sql = $db->q

对象转换成json串时,将null属性去除;以及枚举类的使用

import java.lang.reflect.Field; import java.util.Date; import java.util.Map; import org.hibernate.Hibernate; import abc.dao.Student; import com.alibaba.fastjson.serializer.JSONSerializer; import com.alibaba.fastjson.serializer.PropertyPreFilter; impo

后台代码中绑定枚举类型显示为英文,要显示中文的

显示英文的情况: 是点击同页面中另外一个ddl控件显示隐藏部分,其中隐藏部分中有另一个ddl,此ddl显示为英文 this.ddl.Items.Add(EnumUtils.GetListItem(PeriodType.Month));....... 这里在页面显示中为Month 修改为:(此种格式显示中文) this.ddl.Items.Add(new ListItem(GetString(PeriodType.Month.ToString()),((int)PeriodType.Month).

php 自动加载函数、自动加载方法、自动加载类

在PHP开发过程中,如果希望从 外部引入一个class,通常会使用include和require方法,去把定义这个class的文件包含进来.这个在小规模开发的时候,没什么大问 题.但在大型的开发项目中,这么做会产生大量的require或者include方法调用,这样不因降低效率,而且使得代码难以维护,况且 require_once的代价很大. 在PHP5之前,各个PHP框架如果要实现类的自动加载,一般都是按照某种约定自己实现一个遍历 目录,自动加载所有符合约定规则的文件的类或函数. 当然,PHP

struts2中的数据类型自动转换

参考:https://blog.csdn.net/qq_35326718/article/details/72453042 https://www.cnblogs.com/aigeileshei/p/5889562.html struts2控制层Action可以通过使用拦截器可以自动赋值,但多个属性的数据类型有时会出现不一样的情况,struts2可以将常用的数据类型进行自动转换.有关知识参考上述blog. 本文建立web项目,实现String转换自定义类和String转换成Date类型. 首先建