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 承載中引用的數字視為有效。 為引用的數字還原序列化期間,系統不會擲回例外狀況。
提示
- 預設的獨立 JsonSerializer 或 JsonSerializerOptions 不會有行為變更。
- 就技術上而言,這不算重大變更,因為這使情節更寬鬆而非更嚴格 (意即,系統能成功強制型轉 JSON 字串中的數字,而不會擲回例外狀況)。 不過,由於這是會影響許多 ASP.NET Core 應用程式的重大行為變更,因此仍記錄於此。
- HttpClientJsonExtensions.GetFromJsonAsync 和 HttpContentJsonExtensions.ReadFromJsonAsync 擴充方法也使用 Web 序列化選項集。
導入的版本
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);