Saya baru-baru ini memutakhirkan api web saya dari .Net core 2.2 menjadi .Net core 3.0 dan memperhatikan bahwa permintaan saya mendapatkan kesalahan sekarang ketika saya meneruskan enum dalam sebuah pos ke titik akhir saya. Sebagai contoh:
Saya memiliki model berikut untuk titik api saya:
public class SendFeedbackRequest
{
public FeedbackType Type { get; set; }
public string Message { get; set; }
}
Di mana FeedbackType terlihat seperti ini:
public enum FeedbackType
{
Comment,
Question
}
Dan ini adalah metode pengontrol:
[HttpPost]
public async Task<IActionResult> SendFeedbackAsync([FromBody]SendFeedbackRequest request)
{
var response = await _feedbackService.SendFeedbackAsync(request);
return Ok(response);
}
Di mana saya mengirim ini sebagai postingan ke controller:
{
message: "Test"
type: "comment"
}
Dan saya sekarang mendapatkan kesalahan saat memposting ke titik akhir ini:
The JSON value could not be converted to MyApp.Feedback.Enums.FeedbackType. Path: $.type | LineNumber: 0 | BytePositionInLine: 13."
Ini berfungsi di 2.2 dan memulai kesalahan di 3.0. Saya melihat pembicaraan tentang serializer json berubah pada 3.0, tetapi tidak yakin bagaimana ini harus ditangani.
Bagi mereka yang mencari cuplikan
sumber
Dukungan untuk membuat serial enum sebagai string sudah ada jika Anda menggunakan JsonStringEnumConverter bawaan dan meneruskannya ke JsonSerializerOptions: https://docs.microsoft.com/en-us/dotnet/api/system.text.json.serialization.jsonstringenumconverter ? view = netcore-3.0
Berikut ini adalah contoh pengujian yang menggunakannya: https://github.com/dotnet/corefx/blob/master/src/System.Text.Json/tests/Serialization/ReadScenarioTests.cs#L17
sumber
services.AddMvc() .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); options.JsonSerializerOptions.IgnoreNullValues = true; });