Recentemente, atualizei minha API da Web do .Net core 2.2 para o .Net core 3.0 e notei que minhas solicitações estão recebendo um erro agora quando passo uma enumeração em uma postagem para o endpoint. Por exemplo:
Eu tenho o seguinte modelo para o meu ponto de extremidade da API:
public class SendFeedbackRequest
{
public FeedbackType Type { get; set; }
public string Message { get; set; }
}
Onde o FeedbackType se parece com isso:
public enum FeedbackType
{
Comment,
Question
}
E este é o método do controlador:
[HttpPost]
public async Task<IActionResult> SendFeedbackAsync([FromBody]SendFeedbackRequest request)
{
var response = await _feedbackService.SendFeedbackAsync(request);
return Ok(response);
}
Onde eu envio isso como o corpo da postagem para o controlador:
{
message: "Test"
type: "comment"
}
E agora estou recebendo o seguinte erro ao postar neste endpoint:
The JSON value could not be converted to MyApp.Feedback.Enums.FeedbackType. Path: $.type | LineNumber: 0 | BytePositionInLine: 13."
Isso estava funcionando no 2.2 e iniciou o erro no 3.0. Eu vi falar sobre o serializador json mudando no 3.0, mas não sei como isso deve ser tratado.
Para quem procura um snippet
fonte
Já existe suporte para serialização de enumerações como seqüências de caracteres se você usar o JsonStringEnumConverter interno e o passar para o JsonSerializerOptions: https://docs.microsoft.com/en-us/dotnet/api/system.text.json.serialization.jsonstringenumconverter ? view = netcore-3.0
Aqui está um exemplo de teste que o utiliza: https://github.com/dotnet/corefx/blob/master/src/System.Text.Json/tests/Serialization/ReadScenarioTests.cs#L17
fonte
services.AddMvc() .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); options.JsonSerializerOptions.IgnoreNullValues = true; });