Ich habe kürzlich meine Web-API von .Net Core 2.2 auf .Net Core 3.0 aktualisiert und festgestellt, dass meine Anforderungen jetzt einen Fehler erhalten, wenn ich eine Aufzählung in einem Beitrag an meinen Endpunkt übergebe. Zum Beispiel:
Ich habe das folgende Modell für meinen API-Endpunkt:
public class SendFeedbackRequest
{
public FeedbackType Type { get; set; }
public string Message { get; set; }
}
Wo der FeedbackType so aussieht:
public enum FeedbackType
{
Comment,
Question
}
Und das ist die Controller-Methode:
[HttpPost]
public async Task<IActionResult> SendFeedbackAsync([FromBody]SendFeedbackRequest request)
{
var response = await _feedbackService.SendFeedbackAsync(request);
return Ok(response);
}
Wohin sende ich dies als Postkörper an den Controller:
{
message: "Test"
type: "comment"
}
Und ich erhalte jetzt die folgende Fehlermeldung an diesem Endpunkt:
The JSON value could not be converted to MyApp.Feedback.Enums.FeedbackType. Path: $.type | LineNumber: 0 | BytePositionInLine: 13."
Dies funktionierte in 2.2 und startete den Fehler in 3.0. Ich habe gesehen, wie sich der JSON-Serializer in 3.0 geändert hat, bin mir aber nicht sicher, wie ich damit umgehen soll.
Für diejenigen, die nach einem Ausschnitt suchen
quelle
Die Serialisierung von Enums als Zeichenfolgen wird bereits unterstützt, wenn Sie den integrierten JsonStringEnumConverter verwenden und diese an JsonSerializerOptions übergeben: https://docs.microsoft.com/en-us/dotnet/api/system.text.json.serialization.jsonstringenumconverter view = netcore-3.0
Hier ist ein Beispieltest, der es verwendet: https://github.com/dotnet/corefx/blob/master/src/System.Text.Json/tests/Serialization/ReadScenarioTests.cs#L17
quelle
services.AddMvc() .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); options.JsonSerializerOptions.IgnoreNullValues = true; });