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

从 .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 开始,对于 ASP.NET Core 应用,JSON 有效负载中带引号的数字被默认视为有效。 不会在反序列化带引号的数字期间引发异常。

提示

引入的版本

5.0

更改原因

多个用户已请求在 JsonSerializer 中进行更宽松的数字处理的选项。 此反馈表明,许多 JSON 创建方(例如 Web 上的服务)发出带引号的数字。 通过允许读取带引号的数字(反序列化),.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