1

我有一个自定义类型,我希望 MVC 模型绑定器使用我的 System.Text.Json 的自定义 JsonConverter 序列化/反序列化。这是我的实现:

public class Enumeration 
{
  private readonly string _value;

  public Enumeration(string value)
  {
    _value = value;
  }
  //utility methods
}

public class EmployeeTypeEnum : Enumeration
{
   EmployeeTypeEnum(string value) : base(value)
   {}

   public static implicit operator string(EmployeeTypeEnum employee)
   {
      return employee.Value
   }

   public static implicit operator EmployeeTypeEnum(string value)
   {
      return new EmployeeTypeEnum(value);
   }

   //Other util methods
}

自定义转换器:

public class EmployeeTypeEnumJsonConvertor : System.Text.Json.Serialization.JsonConvertor<EmployeeTypeEnum>
{
     public override EmployeeTypeEnum Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
     {
         //implementation
     }

     public override void Write(ref Utf8JsonWriter writer, EmployeeTypeEnum empEnum, JsonSerializerOptions options)
     {
         //implementation
     }
}

使用上述输入:

public static class EmployeeType 
{
   public static readonly EmployeeTypeEnum Manager = "Manager";
}

使用 employeeTypeEnum 的模型:

public class MyViewModel
{
   ...
   [JsonConverter(typeof(EmployeeTypeEnumJsonConvertor))]
   public EmployeTypeEnum EmployeeRank {get; set;}
   ...
}

阿贾克斯调用:

$.ajax({
   url: `https://localhost:8080/.../GetEmployeeRankInfo?Id=${id}&EmployeeRank=${rank}`,
   type: 'application/json',
   method: 'GET'
   ...
});

控制器:

public Task<IActionResult> GetEmployeeRankInfo(MyViewModel model)
{
   //Get employee Rank info
}

在控制器中,EmployeeRank 始终为空。我在自定义转换器的读取和写入中都设置了一个断点,但没有命中。我还覆盖了 CanConvert 方法,也没有在其中插入它。我浏览了有关此主题的许多 SO 帖子,但大多数都找到了解决方法。什么可能导致不调用自定义序列化程序?谢谢

4

0 回答 0