How to tell JSON.NET StringEnumConverter to take DisplayName?

前端 未结 3 1935
死守一世寂寞
死守一世寂寞 2021-02-02 12:31

I\'ve got the following model:

public enum Status
{
    [Display(Name = \"Awaiting Approval\")]
    AwaitingApproval,
    Rejected,
    Accepted,
}
相关标签:
3条回答
  • 2021-02-02 13:00

    You should try using [EnumMember] instead of [Display]. You can also put the [JsonConverter] attribute on the enum itself.

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

    The VB.NET version for the JsonConverter attribute is:

    <Newtonsoft.Json.JsonConverter(GetType(Newtonsoft.Json.Converters.StringEnumConverter))>
    
    0 讨论(0)
  • 2021-02-02 13:04

    I tried this and got the error type or namespace enum member could not be found... So you guys might get this error too so you need to use

    using System.Runtime.Serialization;
    

    and still you get this error then add a reference like below:

    Right click on your project -> Add -> Reference.. -> Assemblies -> Mark System.Runtime.Serialization (i have 4.0.0.0 version ) -> Ok
    

    Now you can proceed like this:

    [JsonConverter(typeof(StringEnumConverter))]
    public enum Status
    {
        [EnumMember(Value = "Awaiting Approval")]
        AwaitingApproval,
        Rejected,
        Accepted,
    }
    
    0 讨论(0)
  • 2021-02-02 13:09

    In WebAPI the best option is to globally convert all enum string in JSON with Description value

    1. In Model use this namespace using Newtonsoft.Json.Converters;

      public class Docs
      {
      [Key]
      public int Id { get; set; }
      [JsonConverter(typeof(StringEnumConverter))]
      public Status Status { get; set; }
      }
      
    2. In Enum use this namespace using System.Runtime.Serialization; for EnumMember

      public enum Status
      {
      [EnumMember(Value = "Awaiting Approval")]
      AwaitingApproval,
      Rejected,
      Accepted,
      }
      
    3. In Global.asax add this code

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

    It will work fine return enum in JSON using WebAPI.

    0 讨论(0)
提交回复
热议问题