【问题标题】:how to convert enums to display name and value to json如何将枚举转换为显示名称和值到 json
【发布时间】:2019-06-03 06:37:32
【问题描述】:
    public static class HtmlEnumExtensions
    {
        public static MvcHtmlString EnumToString<T>(this HtmlHelper helper)
        {
            var values = Enum.GetValues(typeof(T)).Cast<int>();
            var enumDictionary = values.ToDictionary(value => Enum.GetName(typeof(T), value));

            return new MvcHtmlString(JsonConvert.SerializeObject(enumDictionary));
        }
    }
 <script>
     var assetStatusEnum = @(Html.EnumToString<AssetStatusEnum>())
     var assetStatusEnum ={"Free":0,"Reserved":1,"Inactive":2,"UnderMaintenance":3}
    </script>
public enum ProjectState
    {
        [Display(Name = "bianji")]
        Wait = 0,
        [Display(Name = "tongguo")]
        Pass = 1,
        [Display(Name = "jujue")]
        Reject = 2,
        [Display(Name = "shangchu")]
        Deleted = 3
    }

这是 HtmlHelper 的扩展方法,如何获取枚举自定义属性显示名称和值 var assetStatusEnum = [{"name":"bianji","value":"0"},{"name":"tongguo","value":"1"}...] 如何修改 HtmlHelper 的扩展方法来实现我想要的?我想实现 EnumToString 重载来接受一个 displyname 参数和返回值。

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-core enums


    【解决方案1】:

    尝试使用.Select 谓词将values 展平,如下所示,

    var enumDictionary = Enum.GetValues(typeof(T))
        .Cast<T>()
        .Select(x => new
        {
            name = x,
            value = Convert.ToInt32(Enum.Parse(typeof(T), x.ToString()))
        })
        .ToList();
    

    如果您想在Display 属性中获取名称,那么您可以在下面使用,

    var enumDictionary = Enum.GetValues(typeof(T))
        .Cast<T>()
        .Select(x => new
        {
            name = x.GetType().GetMember(x.ToString()).FirstOrDefault().GetCustomAttribute<DisplayAttribute>().GetName(),
            value = Convert.ToInt32(Enum.Parse(typeof(T), x.ToString()))
        })
        .ToList();
    

    注意:您需要将一些命名空间导入到您的程序中,例如

    using System.ComponentModel.DataAnnotations;
    using System.Reflection;
    

    【讨论】:

    • 如何获取枚举自定义属性显示名称和值
    • 答案已更新。使用第二个 sn-p 获取 Display 枚举成员的名称 :)
    猜你喜欢
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    相关资源
    最近更新 更多