Подтвердить что ты не робот

Как показать JSON.NET StringEnumConverter, чтобы отобразить DisplayName?

У меня есть следующая модель:

public enum Status
{
    [Display(Name = "Awaiting Approval")]
    AwaitingApproval,
    Rejected,
    Accepted,
}

Я использую это перечисление в такой модели:

public class Docs
    {
        [Key]
        public int Id { get; set; }
        [JsonConverter(typeof(StringEnumConverter))]
        public Status Status { get; set; }
    }

Теперь это прекрасно работает; сериализатор возвращает строковый эквивалент перечисления. Мой вопрос заключается в том, как сообщить JSON.NET взять атрибут Display вместо string?

4b9b3361

Ответ 1

Попробуйте использовать [EnumMember] вместо [Display]. Вы также можете поместить атрибут [JsonConverter] в само перечисление.

[JsonConverter(typeof(StringEnumConverter))]
public enum Status
{
    [EnumMember(Value = "Awaiting Approval")]
    AwaitingApproval,
    Rejected,
    Accepted,
}

Ответ 2

В WebAPI наилучшим вариантом является глобальное преобразование всей строки перечисления в JSON со значением Description

  • В модели используйте это пространство имен using Newtonsoft.Json.Converters;

    public class Docs
    {
    [Key]
    public int Id { get; set; }
    [JsonConverter(typeof(StringEnumConverter))]
    public Status Status { get; set; }
    }
    
  • В Enum используйте это пространство имен using System.Runtime.Serialization; для EnumMember

    public enum Status
    {
    [EnumMember(Value = "Awaiting Approval")]
    AwaitingApproval,
    Rejected,
    Accepted,
    }
    
  • В Global.asax добавьте этот код

        protected void Application_Start()
        {
          GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter());
    
        }
    

Он будет работать с точным возвратным перечислением в JSON с помощью WebAPI.