我有一个自定义类型,我希望 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 帖子,但大多数都找到了解决方法。什么可能导致不调用自定义序列化程序?谢谢