ASP.NET Core uygulamaları, teklif edilen sayıların seri durumdan çıkarılmasına izin verir

.NET 5'den başlayarak, ASP.NET Core uygulamaları tarafından JsonSerializerDefaults.Webbelirtilen varsayılan seri durumdan çıkarma seçeneklerini kullanır. Seçenekler Web kümesi, ayarını NumberHandlingJsonNumberHandling.AllowReadingFromStringiçerir. Bu değişiklik, ASP.NET Core uygulamalarının özel durum oluşturma yerine JSON dizeleri olarak temsil edilen sayıların seri durumdan başarıyla çıkarılacağı anlamına gelir.

Açıklama değiştirildi

.NET Core 3.0 - 3.1'de, JsonSerializer JSON yükünde tırnak içinde bir sayıyla karşılaşırsa seri durumdan çıkarma sırasında bir oluşturur JsonException . Alıntılanan sayılar, nesne grafiklerindeki sayı özellikleriyle eşlemek için kullanılır. .NET Core 3.0 - 3.1'de sayılar yalnızca belirteçlerden JsonTokenType.Number okunur.

.NET 5'den başlayarak, JSON yüklerindeki tırnak içine alınmış sayılar, ASP.NET Core uygulamaları için varsayılan olarak geçerli kabul edilir. Alıntılanan sayıların seri durumdan çıkarılması sırasında özel durum oluşturulur.

İpucu

  • Varsayılan, tek başına JsonSerializer veya JsonSerializerOptionsiçin hiçbir davranış değişikliği yoktur.
  • Bu teknik olarak hataya neden olan bir değişiklik değildir, çünkü bir senaryo daha kısıtlayıcı yerine daha izin verir (yani, bir özel durum oluşturmak yerine bir Sayıyı JSON dizesinden zorlamayı başarır). Ancak, bu birçok ASP.NET Core uygulamalarını etkileyen önemli bir davranış değişikliği olduğundan, burada belgelenmiştir.
  • HttpClientJsonExtensions.GetFromJsonAsync ve HttpContentJsonExtensions.ReadFromJsonAsync uzantısı yöntemleri de serileştirme seçenekleri kümesini kullanırWeb.

Sürüm kullanıma sunulmuştur

5.0

Değişiklik nedeni

Birden çok kullanıcı içinde daha izinli sayı işleme JsonSerializerseçeneği istedi. Bu geri bildirim, birçok JSON üreticisinin (örneğin, web'deki hizmetler) alıntılanan sayılar yaydığını gösterir. Alıntılanan sayıların okunmasına izin vererek (seri durumdan çıkarılmış), .NET uygulamaları bu yükleri varsayılan olarak web bağlamlarında başarıyla ayrıştırabilir. ile yapılandırma kullanıma sunulur JsonSerializerDefaults.Web , böylece istemci, sunucu ve paylaşılan gibi farklı uygulama katmanları arasında aynı seçenekleri belirtebilirsiniz.

Bu değişiklik kesintiye neden oluyorsa, örneğin doğrulama için katı sayı işlemeye bağımlıysanız, önceki davranışı yeniden etkinleştirebilirsiniz. JsonSerializerOptions.NumberHandling seçeneğini olarak JsonNumberHandling.Strictayarlayın.

ASP.NET Core MVC ve web API uygulamaları için, seçeneğini aşağıdaki kodu kullanarak yapılandırabilirsiniz Startup :

services.AddControllers()
   .AddJsonOptions(options => options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.Strict);

Etkilenen API’ler