Recientemente actualicé mi API web de .Net core 2.2 a .Net core 3.0 y noté que mis solicitudes están recibiendo un error ahora cuando paso una enumeración en una publicación a mi punto final. Por ejemplo:
Tengo el siguiente modelo para mi punto final de la API:
public class SendFeedbackRequest
{
public FeedbackType Type { get; set; }
public string Message { get; set; }
}
Donde el FeedbackType se ve así:
public enum FeedbackType
{
Comment,
Question
}
Y este es el método del controlador:
[HttpPost]
public async Task<IActionResult> SendFeedbackAsync([FromBody]SendFeedbackRequest request)
{
var response = await _feedbackService.SendFeedbackAsync(request);
return Ok(response);
}
Donde envío esto como el cuerpo de la publicación al controlador:
{
message: "Test"
type: "comment"
}
Y ahora recibo el siguiente error al publicar en este punto final:
The JSON value could not be converted to MyApp.Feedback.Enums.FeedbackType. Path: $.type | LineNumber: 0 | BytePositionInLine: 13."
Esto funcionaba en 2.2 y comenzó el error en 3.0. Vi hablar sobre el serializador json cambiando en 3.0, pero no estoy seguro de cómo se debe manejar esto.
Para aquellos que buscan un fragmento
fuente
StringEnumConverter
, noJsonStringEnumConverter
.La compatibilidad para serializar enumeraciones como cadenas ya existe si usa el JsonStringEnumConverter incorporado y lo pasa a JsonSerializerOptions: https://docs.microsoft.com/en-us/dotnet/api/system.text.json.serialization.jsonstringenumconverter ? view = netcore-3.0
Aquí hay una prueba de muestra que lo usa: https://github.com/dotnet/corefx/blob/master/src/System.Text.Json/tests/Serialization/ReadScenarioTests.cs#L17
fuente
services.AddMvc() .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); options.JsonSerializerOptions.IgnoreNullValues = true; });