Skip to content

Commit 455ded2

Browse files
just use JsonSerializerOptions
1 parent 95a7110 commit 455ded2

7 files changed

Lines changed: 28 additions & 39 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<div align="center">
2-
<h3><img src="./assets/QssLogo.png" width="70"><br /><b>Query String Serializer</b></h3>
2+
<h3><img src="https://raw.githubusercontent.com/erinnmclaughlin/Tizzani.QueryStringSerializer/main/assets/QssLogo.png" width="70"><br /><b>Query String Serializer</b></h3>
33
<p><b>Lightweight serializer for query strings and .NET objects.</b></p>
44
<div>
55
<img alt="Nuget version" src="https://img.shields.io/nuget/v/tizzani.querystringserializer">

src/Tizzani.QueryStringSerializer.Blazor/NavigationManagerExtensions.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Diagnostics.CodeAnalysis;
2+
using System.Text.Json;
23
using Tizzani.QueryStringSerializer;
34

45
// ReSharper disable once CheckNamespace
@@ -40,7 +41,7 @@ public static void NavigateToWithQuery<T>(
4041
this NavigationManager navManager,
4142
[StringSyntax("Uri")] string uri,
4243
T? obj,
43-
QueryStringSerializerOptions options,
44+
JsonSerializerOptions options,
4445
bool forceLoad = false,
4546
bool replace = false)
4647
{
@@ -67,7 +68,7 @@ public static void NavigateToWithQuery<T>(
6768
/// <param name="options">The options to use for deserialization.</param>
6869
/// <typeparam name="T">The type to deserialize to.</typeparam>
6970
/// <returns>The deserialized object.</returns>
70-
public static T? GetQueryObject<T>(this NavigationManager navManager, QueryStringSerializerOptions options)
71+
public static T? GetQueryObject<T>(this NavigationManager navManager, JsonSerializerOptions options)
7172
{
7273
var qs = navManager.ToAbsoluteUri(navManager.Uri).Query;
7374
return QueryStringSerializer.Deserialize<T>(qs, options);

src/Tizzani.QueryStringSerializer.Blazor/Tizzani.QueryStringSerializer.Blazor.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<Copyright>2025 Erin McLaughlin</Copyright>
1010
<RepositoryUrl>https://github.com/erinnmclaughlin/Tizzani.QueryStringSerializer</RepositoryUrl>
1111
<PackageLicenseExpression>MIT</PackageLicenseExpression>
12-
<Version>9.0.0</Version>
12+
<Version>9.1.0</Version>
1313
<PackageIcon>QssBlazorLogo.png</PackageIcon>
1414
</PropertyGroup>
1515

src/Tizzani.QueryStringSerializer/QueryStringSerializer.cs

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Diagnostics.CodeAnalysis;
55
using System.Text.Json;
66
using System.Text.Json.Nodes;
7+
using System.Text.Json.Serialization;
78
using System.Web;
89

910
namespace Tizzani.QueryStringSerializer;
@@ -21,7 +22,7 @@ public static class QueryStringSerializer
2122
public static string Serialize<T>(
2223
[StringSyntax("Uri")] string uri,
2324
T? obj,
24-
QueryStringSerializerOptions? options = null)
25+
JsonSerializerOptions? options = null)
2526
{
2627
return obj is null ? uri : $"{uri}?{Serialize(obj, options)}";
2728
}
@@ -35,15 +36,18 @@ public static string Serialize<T>(
3536
/// <returns>The resulting uri and query string.</returns>
3637
public static string Serialize<T>(
3738
T? obj,
38-
QueryStringSerializerOptions? options = null)
39+
JsonSerializerOptions? options = null)
3940
{
4041
if (obj is null)
4142
return "";
42-
43-
options ??= new QueryStringSerializerOptions();
44-
var jsonSerializerOptions = options.GetJsonSerializerOptions();
4543

46-
var json = JsonSerializer.Serialize(obj, jsonSerializerOptions);
44+
if (options == null)
45+
{
46+
options = new JsonSerializerOptions();
47+
options.Converters.Add(new JsonStringEnumConverter());
48+
}
49+
50+
var json = JsonSerializer.Serialize(obj, options);
4751

4852
var jObject = JsonNode.Parse(json);
4953
return ParseToken(jObject);
@@ -58,16 +62,19 @@ public static string Serialize<T>(
5862
/// <returns></returns>
5963
public static T? Deserialize<T>(
6064
[StringSyntax("Uri")] string uri,
61-
QueryStringSerializerOptions? options = null)
65+
JsonSerializerOptions? options = null)
6266
{
63-
options ??= new QueryStringSerializerOptions();
64-
var jsonSerializerOptions = options.GetJsonSerializerOptions();
67+
if (options == null)
68+
{
69+
options = new JsonSerializerOptions();
70+
options.Converters.Add(new JsonStringEnumConverter());
71+
}
6572

6673
var qs = uri.Contains('?') ? uri.Split('?')[1] : uri;
6774
var qParams = QueryHelpers.ParseQuery(qs);
68-
var dict = GetObjectDictionary(typeof(T), qParams, jsonSerializerOptions);
69-
var json = JsonSerializer.Serialize(dict, jsonSerializerOptions);
70-
return JsonSerializer.Deserialize<T>(json, jsonSerializerOptions);
75+
var dict = GetObjectDictionary(typeof(T), qParams, options);
76+
var json = JsonSerializer.Serialize(dict, options);
77+
return JsonSerializer.Deserialize<T>(json, options);
7178
}
7279

7380
private static Dictionary<string, object?> GetObjectDictionary(Type objectType, Dictionary<string, StringValues> qParams, JsonSerializerOptions jsonSerializerOptions)

src/Tizzani.QueryStringSerializer/QueryStringSerializerOptions.cs

Lines changed: 0 additions & 19 deletions
This file was deleted.

src/Tizzani.QueryStringSerializer/Tizzani.QueryStringSerializer.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<Copyright>2025 Erin McLaughlin</Copyright>
1212
<Description>Tizzani.QueryStringHelpers provides methods for serializing &amp; deserializing objects as URL-encoded query strings.</Description>
1313
<PackageLicenseExpression>MIT</PackageLicenseExpression>
14-
<Version>9.0.0</Version>
14+
<Version>9.1.0</Version>
1515
<Title>$(AssemblyName)</Title>
1616
<PackageIcon>QssLogo.png</PackageIcon>
1717
<PackageProjectUrl>https://github.com/erinnmclaughlin/Tizzani.QueryStringSerializer</PackageProjectUrl>

tests/Tizzani.QueryStringSerializer.Tests/QueryStringSerializerTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Tizzani.QueryStringSerializer.Tests.Mocks;
1+
using System.Text.Json;
2+
using Tizzani.QueryStringSerializer.Tests.Mocks;
23

34
namespace Tizzani.QueryStringSerializer.Tests;
45

@@ -374,11 +375,10 @@ public void Serialize_SerializesEnumAsString_WithDefaultOptions(SomeEnum enumVal
374375
[Fact]
375376
public void Serialize_SerializesEnumAsInt_WhenOptionsHaveEnumAsStringAsFalse()
376377
{
377-
var options = new QueryStringSerializerOptions { EnumsAsStrings = false };
378378
var someClass = new SomeGenericClassWithParameter<SomeEnum>(SomeEnum.BigBanana);
379379

380380
var expected = $"SomeParameter={(int)SomeEnum.BigBanana}";
381-
var actual = QueryStringSerializer.Serialize(someClass, options);
381+
var actual = QueryStringSerializer.Serialize(someClass, JsonSerializerOptions.Default);
382382

383383
Assert.Equal(expected, actual);
384384
}

0 commit comments

Comments
 (0)