Я недавно обновил свой веб-API с .Net core 2.2 до .Net core 3.0 и заметил, что мои запросы теперь получают ошибку, когда я передаю enum в сообщении моей конечной точке. Например:
У меня есть следующая модель для моей конечной точки API:
public class SendFeedbackRequest
{
public FeedbackType Type { get; set; }
public string Message { get; set; }
}
Где FeedbackType выглядит так:
public enum FeedbackType
{
Comment,
Question
}
И это метод контроллера:
[HttpPost]
public async Task<IActionResult> SendFeedbackAsync([FromBody]SendFeedbackRequest request)
{
var response = await _feedbackService.SendFeedbackAsync(request);
return Ok(response);
}
Где я отправляю это как тело сообщения в контроллер:
{
message: "Test"
type: "comment"
}
И теперь я получаю следующее сообщение об ошибке в этой конечной точке:
The JSON value could not be converted to MyApp.Feedback.Enums.FeedbackType. Path: $.type | LineNumber: 0 | BytePositionInLine: 13."
Это работало в 2.2 и начало ошибки в 3.0. Я видел разговоры об изменении сериализатора json в версии 3.0, но не уверен, как это сделать.
Для тех, кто ищет фрагмент
источник
StringEnumConverter
, нетJsonStringEnumConverter
.Поддержка сериализации перечислений в виде строк уже существует, если вы используете встроенный JsonStringEnumConverter и передаете его в JsonSerializerOptions: https://docs.microsoft.com/en-us/dotnet/api/system.text.json.serialization.jsonstringenumconverter ? вид = Netcore-3,0
Вот пример теста, который использует его: https://github.com/dotnet/corefx/blob/master/src/System.Text.Json/tests/Serialization/ReadScenarioTests.cs#L17
источник
services.AddMvc() .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); options.JsonSerializerOptions.IgnoreNullValues = true; });