ASP.NET 核心应用允许反序列化带引号的数字

从 .NET 5 开始,ASP.NET Core 应用使用指定的 JsonSerializerDefaults.Web默认反序列化选项。 选项集 Web 包括将 NumberHandling 设置为 JsonNumberHandling.AllowReadingFromString。 此更改意味着,ASP.NET Core 应用将成功反序列化表示为 JSON 字符串的数字,而不是引发异常。

更改描述

在 .NET Core 3.0 - 3.1 中,如果 JsonSerializer 在 JSON 有效负载中遇到带引号的数字,则在反序列化过程中将引发 JsonException。 带引号的数字用于在对象图中与数字属性进行映射关联。 在 .NET Core 3.0 - 3.1 中,数字仅从 JsonTokenType.Number 令牌中读取。

从 .NET 5 开始,默认情况下,JSON 有效负载中的带引号的数字被视为有效,适用于 ASP.NET Core 应用。 不会在反序列化带引号的数字期间引发异常。

小窍门

已引入的版本

5.0

更改原因

多个用户请求在JsonSerializer中增加一个选项,以便更灵活地处理数字。 此反馈表明许多 JSON 生成者(例如,网络服务)产生带引号的数字。 通过允许读取带引号的数字(反序列化),默认情况下,.NET 应用可以在 Web 上下文中成功分析这些有效负载。 配置通过公开 JsonSerializerDefaults.Web ,以便可以在不同的应用程序层(例如客户端、服务器和共享)中指定相同的选项。

例如,如果此更改是破坏性的,如果依赖于严格的验证编号处理,则可以重新启用以前的行为。 将 JsonSerializerOptions.NumberHandling 选项设置为 JsonNumberHandling.Strict.

对于 ASP.NET Core MVC 和 Web API 应用,可以使用以下代码配置选项 Startup

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

受影响的 API