0

我正在使用 AspNet Core 3.1。我为 NewtonSoft Json 实现了一个自定义的 Json 转换器,如下所示:

public class CustomConverter : Newtonsoft.Json.JsonConverter
{
    public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override bool CanConvert(Type objectType)
    {
        return objectType.IsAssignableFrom(typeof(Device));
    }
}

并像这样在DI中注册

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers(o => { o.ModelBinderProviders.Insert(0, new DeviceModelBinderProvider()); })
        .AddNewtonsoftJson(o => o.SerializerSettings.Converters.Insert(0, new CustomConverter()));
}

我的控制器看起来像:

[ApiController]
[Route("test")]
public class TestController : ControllerBase
{
    [HttpPost]
    public IActionResult Test([FromBody]Device dto)
    {
        if (dto == null)
        {
            return this.Problem();
        }

        return Ok();
    }
}

但是,在反序列化 DTO 时,不会调用此格式化程序。序列化响应时确实会调用它。我对邮递员的要求看起来像

curl --location --request POST 'http://localhost:5000/test' \
--header 'Content-Type: application/json' \
--data-raw '{
    "ScreenSize": "1",
    "Kind": "SmartPhone"
}'
4

0 回答 0