diff --git a/json-csharp/CamelCaseSerialization/CamelCaseSerialization/CamelCaseSerialization.csproj b/json-csharp/CamelCaseSerialization/CamelCaseSerialization/CamelCaseSerialization.csproj index 2b14c8172d..cd19a35631 100644 --- a/json-csharp/CamelCaseSerialization/CamelCaseSerialization/CamelCaseSerialization.csproj +++ b/json-csharp/CamelCaseSerialization/CamelCaseSerialization/CamelCaseSerialization.csproj @@ -2,7 +2,7 @@ Exe - net7.0 + net10.0 enable enable diff --git a/json-csharp/CamelCaseSerialization/CamelCaseSerialization/JsonSerializerExtensions.cs b/json-csharp/CamelCaseSerialization/CamelCaseSerialization/JsonSerializerExtensions.cs index 1f9f76aa85..74db967aea 100644 --- a/json-csharp/CamelCaseSerialization/CamelCaseSerialization/JsonSerializerExtensions.cs +++ b/json-csharp/CamelCaseSerialization/CamelCaseSerialization/JsonSerializerExtensions.cs @@ -4,19 +4,14 @@ namespace CamelCaseSerialization; public static class JsonSerializerExtensions { - public static string SerializeWithCamelCase(this T data) + private static readonly JsonSerializerOptions CamelCaseOptions = new() { - return JsonSerializer.Serialize(data, new JsonSerializerOptions - { - PropertyNamingPolicy = JsonNamingPolicy.CamelCase - }); - } + PropertyNamingPolicy = JsonNamingPolicy.CamelCase + }; - public static T DeserializeFromCamelCase(this string json) - { - return JsonSerializer.Deserialize(json, new JsonSerializerOptions - { - PropertyNamingPolicy = JsonNamingPolicy.CamelCase - }); - } + public static string SerializeWithCamelCase(this T data) => + JsonSerializer.Serialize(data, CamelCaseOptions); + + public static T? DeserializeFromCamelCase(this string json) => + JsonSerializer.Deserialize(json, CamelCaseOptions); } diff --git a/json-csharp/CamelCaseSerialization/CamelCaseSerialization/Program.cs b/json-csharp/CamelCaseSerialization/CamelCaseSerialization/Program.cs index 7e41e86009..0abc7ec71c 100644 --- a/json-csharp/CamelCaseSerialization/CamelCaseSerialization/Program.cs +++ b/json-csharp/CamelCaseSerialization/CamelCaseSerialization/Program.cs @@ -32,8 +32,12 @@ PropertyNamingPolicy = JsonNamingPolicy.CamelCase })}"); +// With the JsonSerializerDefaults.Web preset, the same options ASP.NET Core applies +var webOptions = new JsonSerializerOptions(JsonSerializerDefaults.Web); +Console.WriteLine($"{JsonSerializer.Serialize(person, webOptions)}"); + // With extension method Console.WriteLine($"{person.SerializeWithCamelCase()}"); var personObject = personString.DeserializeFromCamelCase(); -Console.WriteLine($"{personObject.FirstName} {personObject.Surname}({personObject.IsActive}) is {personObject.Age}"); +Console.WriteLine($"{personObject?.FirstName} {personObject?.Surname}({personObject?.IsActive}) is {personObject?.Age}"); diff --git a/json-csharp/CamelCaseSerialization/Tests/CamelCaseSerialization.Tests/CamelCaseSerialization.Tests.csproj b/json-csharp/CamelCaseSerialization/Tests/CamelCaseSerialization.Tests/CamelCaseSerialization.Tests.csproj index b7a7bbb0ac..544a60a0ad 100644 --- a/json-csharp/CamelCaseSerialization/Tests/CamelCaseSerialization.Tests/CamelCaseSerialization.Tests.csproj +++ b/json-csharp/CamelCaseSerialization/Tests/CamelCaseSerialization.Tests/CamelCaseSerialization.Tests.csproj @@ -1,7 +1,7 @@ - net7.0 + net10.0 enable enable @@ -9,13 +9,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/json-csharp/CamelCaseSerialization/Tests/CamelCaseSerialization.Tests/ExtensionTests.cs b/json-csharp/CamelCaseSerialization/Tests/CamelCaseSerialization.Tests/ExtensionTests.cs index 5d85868649..4fc97c92de 100644 --- a/json-csharp/CamelCaseSerialization/Tests/CamelCaseSerialization.Tests/ExtensionTests.cs +++ b/json-csharp/CamelCaseSerialization/Tests/CamelCaseSerialization.Tests/ExtensionTests.cs @@ -1,3 +1,5 @@ +using System.Text.Json; + namespace CamelCaseSerialization.Tests; public class ExtensionTests @@ -15,7 +17,7 @@ public void GivenPerson_WhenUsingExtensionMethod_ThenSerializeWithCamelCase() var result = person.SerializeWithCamelCase(); - Assert.Equal(result, """{"firstName":"John","surname":"Doe","age":20,"isActive":true}"""); + Assert.Equal("""{"firstName":"John","surname":"Doe","age":20,"isActive":true}""", result); } [Fact] @@ -24,10 +26,28 @@ public void GivenJsonStringInCamelCase_WhenUsingExtensionMethod_ThenDeserializeI var personJson = """{"firstName":"John","surname":"Doe","age":20,"isActive":true}"""; var result = personJson.DeserializeFromCamelCase(); - - Assert.Equal(result.Age, 20); - Assert.Equal(result.FirstName, "John"); - Assert.Equal(result.Surname, "Doe"); - Assert.Equal(result.IsActive, true); + + Assert.NotNull(result); + Assert.Equal(20, result.Age); + Assert.Equal("John", result.FirstName); + Assert.Equal("Doe", result.Surname); + Assert.True(result.IsActive); + } + + [Fact] + public void GivenPerson_WhenSerializingWithWebDefaults_ThenPropertyNamesAreCamelCase() + { + var person = new Person + { + Age = 20, + FirstName = "John", + Surname = "Doe", + IsActive = true + }; + var webOptions = new JsonSerializerOptions(JsonSerializerDefaults.Web); + + var result = JsonSerializer.Serialize(person, webOptions); + + Assert.Equal("""{"firstName":"John","surname":"Doe","age":20,"isActive":true}""", result); } }