aplikasi ASP.NET Core memungkinkan deserialisasi nomor yang dikutip
Mulai dari .NET 5, aplikasi ASP.NET Core menggunakan opsi deserialisasi default seperti yang ditentukan oleh JsonSerializerDefaults.Web. Web Sekumpulan opsi mencakup pengaturan NumberHandling ke JsonNumberHandling.AllowReadingFromString. Perubahan ini berarti bahwa aplikasi ASP.NET Core akan berhasil mendeserialisasi angka yang direpresentasikan sebagai string JSON alih-alih melemparkan pengecualian.
Deskripsi perubahan
Dalam .NET Core 3.0 - 3.1, JsonSerializer melempar JsonException selama deserialisasi jika menemukan angka yang dikutip dalam payload JSON. Angka yang dikutip digunakan untuk memetakan dengan properti angka dalam grafik objek. Di .NET Core 3.0 - 3.1, angka hanya dibaca dari JsonTokenType.Number token.
Mulai dari .NET 5, angka yang dikutip dalam payload JSON dianggap valid, secara default, untuk aplikasi ASP.NET Core. Tidak ada pengecualian yang dilemparkan selama deserialisasi angka yang dikutip.
Tip
- Tidak ada perubahan perilaku untuk default, mandiri JsonSerializer , atau JsonSerializerOptions.
- Ini secara teknis bukan perubahan yang melanggar, karena membuat skenario lebih permisif alih-alih lebih ketat (yaitu, berhasil memaksakan angka dari string JSON alih-alih melempar pengecualian). Namun, karena ini adalah perubahan perilaku signifikan yang memengaruhi banyak aplikasi ASP.NET Core, itu didokumenkan di sini.
- Metode HttpClientJsonExtensions.GetFromJsonAsync ekstensi dan HttpContentJsonExtensions.ReadFromJsonAsync juga menggunakan Web serangkaian opsi serialisasi.
Versi yang diperkenalkan
5.0
Alasan untuk berubah
Beberapa pengguna telah meminta opsi untuk penanganan angka yang lebih permisif di JsonSerializer. Umpan balik ini menunjukkan bahwa banyak produsen JSON (misalnya, layanan di seluruh web) memancarkan angka yang dikutip. Dengan mengizinkan angka yang dikutip dibaca (deserialisasi), aplikasi .NET dapat berhasil mengurai payload ini, secara default, dalam konteks web. Konfigurasi diekspos melalui JsonSerializerDefaults.Web sehingga Anda dapat menentukan opsi yang sama di berbagai lapisan aplikasi, misalnya, klien, server, dan bersama.
Tindakan yang direkomendasikan
Jika perubahan ini mengganggu, misalnya, jika Anda bergantung pada penanganan angka yang ketat untuk validasi, Anda dapat mengaktifkan kembali perilaku sebelumnya. Atur opsi ke JsonSerializerOptions.NumberHandlingJsonNumberHandling.Strict.
Untuk ASP.NET Core MVC dan aplikasi API web, Anda dapat mengonfigurasi opsi dengan Startup
menggunakan kode berikut:
services.AddControllers()
.AddJsonOptions(options => options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.Strict);