Как показать 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
?
Ответы
Ответ 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.