Bagikan melalui


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

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.

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);

API yang Terpengaruh