как преобразовать перечисления для отображения имени и значения в JSON - PullRequest
0 голосов
/ 03 июня 2019
    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. Как я могу получить отображаемое имя и значение для перечисления customattribute var assetStatusEnum = [{"name":"bianji","value":"0"},{"name":"tongguo","value":"1"}...] Как изменить метод расширения для HtmlHelper, чтобы достичь того, чего я хочу?Я хочу реализовать перегрузку EnumToString для принятия параметра displyname и возвращаемого значения.

1 Ответ

3 голосов
/ 03 июня 2019

Попробуйте сгладить values, как показано ниже, с помощью предиката .Select,

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...