From 75fbf9c45a2230415d83a25689728ad728e44434 Mon Sep 17 00:00:00 2001 From: Weihan Li <7604648+WeihanLi@users.noreply.github.com> Date: Fri, 25 Oct 2024 23:23:15 +0800 Subject: [PATCH 1/3] use JsonSerializerOptions.Web --- .../src/Services/SignOutSessionStateManager.cs | 7 +++---- src/Http/Http.Results/test/JsonResultTests.cs | 12 +++++------- src/Http/Http.Results/test/ProblemResultTests.cs | 12 +++++------- .../Routing/test/FunctionalTests/MinimalFormTests.cs | 11 +++++------ 4 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/Components/WebAssembly/WebAssembly.Authentication/src/Services/SignOutSessionStateManager.cs b/src/Components/WebAssembly/WebAssembly.Authentication/src/Services/SignOutSessionStateManager.cs index c0fe3cab7307..22c0ebf27d76 100644 --- a/src/Components/WebAssembly/WebAssembly.Authentication/src/Services/SignOutSessionStateManager.cs +++ b/src/Components/WebAssembly/WebAssembly.Authentication/src/Services/SignOutSessionStateManager.cs @@ -1,4 +1,4 @@ -// Licensed to the .NET Foundation under one or more agreements. +JsonSerializerOptions(JsonSerializerDefaults.Web);// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics.CodeAnalysis; @@ -15,7 +15,6 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Authentication; public class SignOutSessionStateManager { private readonly IJSRuntime _jsRuntime; - private static readonly JsonSerializerOptions _serializationOptions = new JsonSerializerOptions(JsonSerializerDefaults.Web); /// /// Initialize a new instance of . @@ -35,7 +34,7 @@ public virtual ValueTask SetSignOutState() return _jsRuntime.InvokeVoidAsync( "sessionStorage.setItem", "Microsoft.AspNetCore.Components.WebAssembly.Authentication.SignOutState", - JsonSerializer.Serialize(SignOutState.Instance, _serializationOptions)); + JsonSerializer.Serialize(SignOutState.Instance, JsonSerializerOptions.Web)); } /// @@ -71,7 +70,7 @@ private async ValueTask GetSignOutState() [DynamicDependency(JsonSerialized, typeof(SignOutState))] [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", Justification = "The correct members will be preserved by the above DynamicDependency.")] // This should use JSON source generation - private static SignOutState DeserializeSignOutState(string result) => JsonSerializer.Deserialize(result, _serializationOptions); + private static SignOutState DeserializeSignOutState(string result) => JsonSerializer.Deserialize(result, JsonSerializerOptions.Web); private ValueTask ClearSignOutState() { diff --git a/src/Http/Http.Results/test/JsonResultTests.cs b/src/Http/Http.Results/test/JsonResultTests.cs index 7b627ea7eab2..1c2d6d7fb225 100644 --- a/src/Http/Http.Results/test/JsonResultTests.cs +++ b/src/Http/Http.Results/test/JsonResultTests.cs @@ -14,8 +14,6 @@ namespace Microsoft.AspNetCore.Http.HttpResults; public class JsonResultTests { - private static readonly JsonSerializerOptions SerializerOptions = new JsonSerializerOptions(JsonSerializerDefaults.Web); - [Fact] public async Task JsonResult_ExecuteAsync_WithNullValue_Works() { @@ -117,7 +115,7 @@ public async Task ExecuteAsync_UsesDefaults_ForProblemDetails() // Arrange var details = new ProblemDetails(); - var result = new JsonHttpResult(details, jsonSerializerOptions: SerializerOptions); + var result = new JsonHttpResult(details, jsonSerializerOptions: JsonSerializerOptions.Web); var stream = new MemoryStream(); var httpContext = new DefaultHttpContext() { @@ -134,7 +132,7 @@ public async Task ExecuteAsync_UsesDefaults_ForProblemDetails() // Assert Assert.Equal(StatusCodes.Status500InternalServerError, httpContext.Response.StatusCode); stream.Position = 0; - var responseDetails = JsonSerializer.Deserialize(stream, SerializerOptions); + var responseDetails = JsonSerializer.Deserialize(stream, JsonSerializerOptions.Web); Assert.Equal("https://tools.ietf.org/html/rfc9110#section-15.6.1", responseDetails.Type); Assert.Equal("An error occurred while processing your request.", responseDetails.Title); Assert.Equal(StatusCodes.Status500InternalServerError, responseDetails.Status); @@ -146,7 +144,7 @@ public async Task ExecuteAsync_UsesDefaults_ForValidationProblemDetails() // Arrange var details = new HttpValidationProblemDetails(); - var result = new JsonHttpResult(details, jsonSerializerOptions: SerializerOptions); + var result = new JsonHttpResult(details, jsonSerializerOptions: JsonSerializerOptions.Web); var stream = new MemoryStream(); var httpContext = new DefaultHttpContext() { @@ -163,7 +161,7 @@ public async Task ExecuteAsync_UsesDefaults_ForValidationProblemDetails() // Assert Assert.Equal(StatusCodes.Status400BadRequest, httpContext.Response.StatusCode); stream.Position = 0; - var responseDetails = JsonSerializer.Deserialize(stream, SerializerOptions); + var responseDetails = JsonSerializer.Deserialize(stream, JsonSerializerOptions.Web); Assert.Equal("https://tools.ietf.org/html/rfc9110#section-15.5.1", responseDetails.Type); Assert.Equal("One or more validation errors occurred.", responseDetails.Title); Assert.Equal(StatusCodes.Status400BadRequest, responseDetails.Status); @@ -195,7 +193,7 @@ public async Task ExecuteAsync_UsesDefaults_HttpStatusCodesWithoutTypes() // Assert Assert.Equal(StatusCodes.Status418ImATeapot, httpContext.Response.StatusCode); stream.Position = 0; - var responseDetails = JsonSerializer.Deserialize(stream, SerializerOptions); + var responseDetails = JsonSerializer.Deserialize(stream, JsonSerializerOptions.Web); Assert.Null(responseDetails.Type); Assert.Equal("I'm a teapot", responseDetails.Title); Assert.Equal(StatusCodes.Status418ImATeapot, responseDetails.Status); diff --git a/src/Http/Http.Results/test/ProblemResultTests.cs b/src/Http/Http.Results/test/ProblemResultTests.cs index 748a2083b34c..c01c42a5d298 100644 --- a/src/Http/Http.Results/test/ProblemResultTests.cs +++ b/src/Http/Http.Results/test/ProblemResultTests.cs @@ -12,8 +12,6 @@ namespace Microsoft.AspNetCore.Http.HttpResults; public class ProblemResultTests { - private static readonly JsonSerializerOptions SerializerOptions = new JsonSerializerOptions(JsonSerializerDefaults.Web); - [Fact] public async Task ExecuteAsync_UsesDefaults_ForProblemDetails() { @@ -37,7 +35,7 @@ public async Task ExecuteAsync_UsesDefaults_ForProblemDetails() // Assert Assert.Equal(StatusCodes.Status500InternalServerError, httpContext.Response.StatusCode); stream.Position = 0; - var responseDetails = JsonSerializer.Deserialize(stream, SerializerOptions); + var responseDetails = JsonSerializer.Deserialize(stream, JsonSerializerOptions.Web); Assert.Equal("https://tools.ietf.org/html/rfc9110#section-15.6.1", responseDetails.Type); Assert.Equal("An error occurred while processing your request.", responseDetails.Title); Assert.Equal(StatusCodes.Status500InternalServerError, responseDetails.Status); @@ -69,7 +67,7 @@ public async Task ExecuteAsync_UsesDefaultsFromProblemDetailsService_ForProblemD // Assert Assert.Equal(StatusCodes.Status500InternalServerError, httpContext.Response.StatusCode); stream.Position = 0; - var responseDetails = JsonSerializer.Deserialize(stream, SerializerOptions); + var responseDetails = JsonSerializer.Deserialize(stream, JsonSerializerOptions.Web); Assert.Null(responseDetails.Type); Assert.Equal("An error occurred while processing your request.", responseDetails.Title); Assert.Equal(StatusCodes.Status500InternalServerError, responseDetails.Status); @@ -98,7 +96,7 @@ public async Task ExecuteAsync_UsesDefaults_ForValidationProblemDetails() // Assert Assert.Equal(StatusCodes.Status400BadRequest, httpContext.Response.StatusCode); stream.Position = 0; - var responseDetails = JsonSerializer.Deserialize(stream, SerializerOptions); + var responseDetails = JsonSerializer.Deserialize(stream, JsonSerializerOptions.Web); Assert.Equal("https://tools.ietf.org/html/rfc9110#section-15.5.1", responseDetails.Type); Assert.Equal("One or more validation errors occurred.", responseDetails.Title); Assert.Equal(StatusCodes.Status400BadRequest, responseDetails.Status); @@ -130,7 +128,7 @@ public async Task ExecuteAsync_SetsTitleFromReasonPhrases_WhenNotInDefaults() // Assert Assert.Equal(StatusCodes.Status418ImATeapot, httpContext.Response.StatusCode); stream.Position = 0; - var responseDetails = JsonSerializer.Deserialize(stream, SerializerOptions); + var responseDetails = JsonSerializer.Deserialize(stream, JsonSerializerOptions.Web); Assert.Null(responseDetails.Type); Assert.Equal("I'm a teapot", responseDetails.Title); Assert.Equal(StatusCodes.Status418ImATeapot, responseDetails.Status); @@ -162,7 +160,7 @@ public async Task ExecuteAsync_IncludeErrors_ForValidationProblemDetails() // Assert Assert.Equal(StatusCodes.Status400BadRequest, httpContext.Response.StatusCode); stream.Position = 0; - var responseDetails = JsonSerializer.Deserialize(stream, SerializerOptions); + var responseDetails = JsonSerializer.Deserialize(stream, JsonSerializerOptions.Web); Assert.Equal(StatusCodes.Status400BadRequest, responseDetails.Status); var error = Assert.Single(responseDetails.Errors); Assert.Equal("testError", error.Key); diff --git a/src/Http/Routing/test/FunctionalTests/MinimalFormTests.cs b/src/Http/Routing/test/FunctionalTests/MinimalFormTests.cs index 8affd06a34c5..b27a60b31d1e 100644 --- a/src/Http/Routing/test/FunctionalTests/MinimalFormTests.cs +++ b/src/Http/Routing/test/FunctionalTests/MinimalFormTests.cs @@ -19,7 +19,6 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests; public class MinimalFormTests { - private static readonly JsonSerializerOptions SerializerOptions = new JsonSerializerOptions(JsonSerializerDefaults.Web); [Fact] public async Task MapPost_WithForm_ValidToken_Works() @@ -65,7 +64,7 @@ public async Task MapPost_WithForm_ValidToken_Works() var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); - var result = JsonSerializer.Deserialize(body, SerializerOptions); + var result = JsonSerializer.Deserialize(body, JsonSerializerOptions.Web); Assert.Equal("Test task", result.Name); Assert.False(result.IsCompleted); Assert.Equal(DateTime.Today.AddDays(1), result.DueDate); @@ -125,7 +124,7 @@ public async Task MapRequestDelegate_WithForm_RequiresValidation_ValidToken_Work var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); - var result = JsonSerializer.Deserialize(body, SerializerOptions); + var result = JsonSerializer.Deserialize(body, JsonSerializerOptions.Web); Assert.Equal("Test task", result.Name); Assert.False(result.IsCompleted); Assert.Equal(DateTime.Today.AddDays(1), result.DueDate); @@ -286,7 +285,7 @@ public async Task MapPost_WithForm_WithoutAntiforgery_WithoutMiddleware_Works() var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); - var result = JsonSerializer.Deserialize(body, SerializerOptions); + var result = JsonSerializer.Deserialize(body, JsonSerializerOptions.Web); Assert.Equal("Test task", result.Name); Assert.False(result.IsCompleted); Assert.Equal(DateTime.Today.AddDays(1), result.DueDate); @@ -333,7 +332,7 @@ public async Task MapPost_WithForm_WithoutAntiforgery_AndRouteGroup_WithoutMiddl var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); - var result = JsonSerializer.Deserialize(body, SerializerOptions); + var result = JsonSerializer.Deserialize(body, JsonSerializerOptions.Web); Assert.Equal("Test task", result.Name); Assert.False(result.IsCompleted); Assert.Equal(DateTime.Today.AddDays(1), result.DueDate); @@ -493,7 +492,7 @@ public async Task MapPost_WithForm_ValidToken_RequestSizeLimit_Works(bool hasLim var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); - var result = JsonSerializer.Deserialize(body, SerializerOptions); + var result = JsonSerializer.Deserialize(body, JsonSerializerOptions.Web); Assert.Equal("Test task", result.Name); Assert.False(result.IsCompleted); Assert.Equal(DateTime.Today.AddDays(1), result.DueDate); From 7f3747139224fce2d0b286d016c93a22ca6587bc Mon Sep 17 00:00:00 2001 From: Weihan Li <7604648+WeihanLi@users.noreply.github.com> Date: Fri, 25 Oct 2024 23:24:46 +0800 Subject: [PATCH 2/3] fix miss copy-paste --- .../src/Services/SignOutSessionStateManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/WebAssembly/WebAssembly.Authentication/src/Services/SignOutSessionStateManager.cs b/src/Components/WebAssembly/WebAssembly.Authentication/src/Services/SignOutSessionStateManager.cs index 22c0ebf27d76..74b61cb7aca2 100644 --- a/src/Components/WebAssembly/WebAssembly.Authentication/src/Services/SignOutSessionStateManager.cs +++ b/src/Components/WebAssembly/WebAssembly.Authentication/src/Services/SignOutSessionStateManager.cs @@ -1,4 +1,4 @@ -JsonSerializerOptions(JsonSerializerDefaults.Web);// Licensed to the .NET Foundation under one or more agreements. +// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics.CodeAnalysis; From b2cc7f8a20e614a2485b09fccec11d62d93140ad Mon Sep 17 00:00:00 2001 From: Weihan Li <7604648+WeihanLi@users.noreply.github.com> Date: Fri, 25 Oct 2024 23:32:05 +0800 Subject: [PATCH 3/3] more JsonSerializerOptions.Web --- src/Http/Http.Results/test/ValidationProblemResultTests.cs | 4 ++-- .../test/Formatters/SystemTextJsonOutputFormatterTest.cs | 2 +- .../test/Infrastructure/DefaultApiProblemDetailsWriterTest.cs | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Http/Http.Results/test/ValidationProblemResultTests.cs b/src/Http/Http.Results/test/ValidationProblemResultTests.cs index dff998e05ff3..745ded47cb30 100644 --- a/src/Http/Http.Results/test/ValidationProblemResultTests.cs +++ b/src/Http/Http.Results/test/ValidationProblemResultTests.cs @@ -39,7 +39,7 @@ public async Task ExecuteAsync_UsesDefaults_ForProblemDetails() Assert.Equal(StatusCodes.Status400BadRequest, httpContext.Response.StatusCode); Assert.Equal(details, result.ProblemDetails); stream.Position = 0; - var responseDetails = JsonSerializer.Deserialize(stream, new JsonSerializerOptions(JsonSerializerDefaults.Web)); + var responseDetails = JsonSerializer.Deserialize(stream, JsonSerializerOptions.Web); Assert.Equal("https://tools.ietf.org/html/rfc9110#section-15.5.1", responseDetails.Type); Assert.Equal("One or more validation errors occurred.", responseDetails.Title); Assert.Equal(StatusCodes.Status400BadRequest, responseDetails.Status); @@ -71,7 +71,7 @@ public async Task ExecuteAsync_UsesDefaultsFromProblemDetailsService_ForProblemD // Assert Assert.Equal(StatusCodes.Status400BadRequest, httpContext.Response.StatusCode); stream.Position = 0; - var responseDetails = JsonSerializer.Deserialize(stream, new JsonSerializerOptions(JsonSerializerDefaults.Web)); + var responseDetails = JsonSerializer.Deserialize(stream, JsonSerializerOptions.Web); Assert.Null(responseDetails.Type); Assert.Equal("One or more validation errors occurred.", responseDetails.Title); Assert.Equal(StatusCodes.Status400BadRequest, responseDetails.Status); diff --git a/src/Mvc/Mvc.Core/test/Formatters/SystemTextJsonOutputFormatterTest.cs b/src/Mvc/Mvc.Core/test/Formatters/SystemTextJsonOutputFormatterTest.cs index efbe148abb5c..502c789aba6b 100644 --- a/src/Mvc/Mvc.Core/test/Formatters/SystemTextJsonOutputFormatterTest.cs +++ b/src/Mvc/Mvc.Core/test/Formatters/SystemTextJsonOutputFormatterTest.cs @@ -88,7 +88,7 @@ public async Task WriteResponseBodyAsync_ForLargeAsyncEnumerable() { // Arrange var expected = new MemoryStream(); - await JsonSerializer.SerializeAsync(expected, LargeAsync(), new JsonSerializerOptions(JsonSerializerDefaults.Web)); + await JsonSerializer.SerializeAsync(expected, LargeAsync(), JsonSerializerOptions.Web); var formatter = GetOutputFormatter(); var mediaType = MediaTypeHeaderValue.Parse("application/json; charset=utf-8"); var encoding = CreateOrGetSupportedEncoding(formatter, "utf-8", isDefaultEncoding: true); diff --git a/src/Mvc/Mvc.Core/test/Infrastructure/DefaultApiProblemDetailsWriterTest.cs b/src/Mvc/Mvc.Core/test/Infrastructure/DefaultApiProblemDetailsWriterTest.cs index ae8fc3a945f1..5a0ff23e205b 100644 --- a/src/Mvc/Mvc.Core/test/Infrastructure/DefaultApiProblemDetailsWriterTest.cs +++ b/src/Mvc/Mvc.Core/test/Infrastructure/DefaultApiProblemDetailsWriterTest.cs @@ -42,7 +42,7 @@ public async Task WriteAsync_Works() //Assert stream.Position = 0; - var problemDetails = await JsonSerializer.DeserializeAsync(stream, new JsonSerializerOptions(JsonSerializerDefaults.Web)); + var problemDetails = await JsonSerializer.DeserializeAsync(stream, JsonSerializerOptions.Web); Assert.NotNull(problemDetails); Assert.Equal(expectedProblem.Status, problemDetails.Status); Assert.Equal(expectedProblem.Type, problemDetails.Type); @@ -81,7 +81,7 @@ public async Task WriteAsync_Works_WhenReplacingProblemDetailsUsingSetter() //Assert stream.Position = 0; - var problemDetails = await JsonSerializer.DeserializeAsync(stream, new JsonSerializerOptions(JsonSerializerDefaults.Web)); + var problemDetails = await JsonSerializer.DeserializeAsync(stream, JsonSerializerOptions.Web); Assert.NotNull(problemDetails); Assert.Equal(expectedProblem.Status, problemDetails.Status); Assert.Equal(expectedProblem.Type, problemDetails.Type);