diff --git a/src/RestClient/RestClient/src/ClickView.Extensions.RestClient.csproj b/src/RestClient/RestClient/src/ClickView.Extensions.RestClient.csproj
index c95a594..f22e300 100644
--- a/src/RestClient/RestClient/src/ClickView.Extensions.RestClient.csproj
+++ b/src/RestClient/RestClient/src/ClickView.Extensions.RestClient.csproj
@@ -9,6 +9,7 @@
+
diff --git a/src/RestClient/RestClient/src/Serialization/SystemTextJsonSerializer.cs b/src/RestClient/RestClient/src/Serialization/SystemTextJsonSerializer.cs
new file mode 100644
index 0000000..7388b87
--- /dev/null
+++ b/src/RestClient/RestClient/src/Serialization/SystemTextJsonSerializer.cs
@@ -0,0 +1,52 @@
+namespace ClickView.Extensions.RestClient.Serialization;
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+public class SystemTextJsonSerializer(JsonSerializerOptions options) : ISerializer
+{
+ public static readonly ISerializer Default = new SystemTextJsonSerializer();
+
+ public SystemTextJsonSerializer() : this(GetDefaultOptions())
+ {
+ }
+
+ public static JsonSerializerOptions GetDefaultOptions()
+ {
+ return new JsonSerializerOptions
+ {
+ // Same defaults as JsonSerializerDefaults.Web
+ PropertyNameCaseInsensitive = true,
+ PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
+ NumberHandling = JsonNumberHandling.AllowReadingFromString
+ };
+ }
+
+ public string Serialize(object obj)
+ {
+ return JsonSerializer.Serialize(obj, options);
+ }
+
+ public T? Deserialize(string input)
+ {
+ if (input is null)
+ throw new ArgumentNullException(nameof(input));
+
+ return JsonSerializer.Deserialize(input, options);
+ }
+
+ public object? Deserialize(string input, Type type)
+ {
+ if (input is null)
+ throw new ArgumentNullException(nameof(input));
+
+ return JsonSerializer.Deserialize(input, type, options);
+ }
+
+ public ValueTask DeserializeAsync(Stream stream, CancellationToken cancellationToken = default)
+ {
+ return JsonSerializer.DeserializeAsync(stream, options, cancellationToken);
+ }
+
+ public string Format => "json";
+}