2015-07-06 3 views
2

Я хочу получить значение EnumMember Static. Он работает, если я пропускаю заполнение моей модели, как показано ниже.Как получить значение Enum статически?

LibraryStatus Enum

public enum LibraryStatus 
{ 
    Watching, 
    Completed, 
    [EnumMember(Value = "On Hold")] 
    OnHold, 
    Dropped, 
    [EnumMember(Value = "Plan To Watch")] 
    PlanToWatch 
} 

Класс

public class LibraryListing 
{ 
    ... 
    [JsonConverter(typeof(StringEnumConverter))] 
    public LibraryStatus LibraryStatus { get; set; } 
    ... 
} 

Когда я прохожу модель с точки зрения:

var initialData = @Html.Raw(JsonConvert.SerializeObject(Model, new JsonSerializerSettings {ReferenceLoopHandling = ReferenceLoopHandling.Ignore })); 

JSON выход

[{"AnimeListId":2146,"LibraryStatus":"On Hold","AnimeAccountId":3},{"AnimeListId":2165,"LibraryStatus":"Plan To Watch","AnimeAccountId":3},{"AnimeListId":2145,"LibraryStatus":"Watching","AnimeAccountId":3},{"AnimeListId":2174,"LibraryStatus":"On Hold","AnimeAccountId":3},{"AnimeListId":2143,"LibraryStatus":"Watching","AnimeAccountId":3},{"AnimeListId":2171,"LibraryStatus":"Dropped","AnimeAccountId":3}] 

Посмотрите на ключ "LibraryStatus", он имеет значение "On Hold"

Однако, когда я делаю вызов так:

var output = Enum.GetValues(typeof(LibraryStatus)); 

выход:

[0] => "Watching", 
[1] => "Completed", 
[2] => "OnHold", ***** 
[3] => "Dropped", 
[4] => "PlanToWatch" ***** 

Мне в основном нужны имена перечислений статически. Как я могу получить результат для соответствия? Или еще лучше, у кого есть лучший метод/предложения? Мне в основном нужен вывод, поэтому я могу фильтровать данные на экране.

ответ

3

Попробуйте это:

private List<String> GetEnumNames(Type enumType) 
{ 
    return enumType.GetMembers(BindingFlags.Public | BindingFlags.Static).Select(m => { 
     var attr = m.GetCustomAttribute<EnumMemberAttribute>(); 
     if (attr != null) 
      return attr.Value; 
     return m.Name; 
    }).ToList(); 
} 

Продолжительность:

var output = GetEnumNames(typeof(LibraryStatus)); 
output.Dump(); 

дает мне выход:

Watching 
Completed 
On Hold 
Dropped 
Plan To Watch 
Смежные вопросы