Niedawno zaktualizowałem mój interfejs WWW z .Net core 2.2 do .Net core 3.0 i zauważyłem, że moje żądania pojawiają się teraz, gdy przekazuję wyliczenie w poście do mojego punktu końcowego. Na przykład:
Mam następujący model mojego punktu końcowego interfejsu API:
public class SendFeedbackRequest
{
public FeedbackType Type { get; set; }
public string Message { get; set; }
}
Gdzie wygląda FeedbackType:
public enum FeedbackType
{
Comment,
Question
}
A to jest metoda kontrolera:
[HttpPost]
public async Task<IActionResult> SendFeedbackAsync([FromBody]SendFeedbackRequest request)
{
var response = await _feedbackService.SendFeedbackAsync(request);
return Ok(response);
}
Gdzie przesyłam to jako treść postu do kontrolera:
{
message: "Test"
type: "comment"
}
I otrzymuję teraz następujący komunikat o błędzie w tym punkcie końcowym:
The JSON value could not be converted to MyApp.Feedback.Enums.FeedbackType. Path: $.type | LineNumber: 0 | BytePositionInLine: 13."
Działało to w wersji 2.2, a błąd zaczął w wersji 3.0. Widziałem rozmowę o zmianie serializatora json w 3.0, ale nie jestem pewien, jak to powinno być obsługiwane.
Dla tych, którzy szukają krótkiego fragmentu
źródło
Obsługa szeregowania wyliczeń jako ciągów już istnieje, jeśli użyjesz wbudowanego JsonStringEnumConverter i przekażesz to do JsonSerializerOptions: https://docs.microsoft.com/en-us/dotnet/api/system.text.json.serialization.jsonstringenumconverter ? widok = netcore-3.0
Oto przykładowy test, który go używa: https://github.com/dotnet/corefx/blob/master/src/System.Text.Json/tests/Serialization/ReadScenarioTests.cs#L17
źródło
services.AddMvc() .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); options.JsonSerializerOptions.IgnoreNullValues = true; });