From 21cc70e77bdbbc9cdb7a89d78f708e61d43c85a0 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sun, 19 Apr 2026 11:05:55 +0200 Subject: [PATCH] . --- .../WireMock.Net.Extensions.Routing.csproj | 2 +- ...ock.Net.Matchers.SystemTextJsonPath.csproj | 2 +- .../Serialization/MappingSerializer.cs | 56 ++++++------------- .../Server/WireMockServer.Admin.cs | 26 ++++----- .../WireMock.Net.NUnit.csproj | 2 +- .../WireMock.Net.RestClient.csproj | 2 +- .../JsonSerializationConstants.cs | 16 ++++-- .../WireMock.Net.Shared.csproj | 2 +- .../WireMock.Net.Tests.csproj | 2 +- 9 files changed, 46 insertions(+), 64 deletions(-) diff --git a/src/WireMock.Net.Extensions.Routing/WireMock.Net.Extensions.Routing.csproj b/src/WireMock.Net.Extensions.Routing/WireMock.Net.Extensions.Routing.csproj index 11578493..2bffa845 100644 --- a/src/WireMock.Net.Extensions.Routing/WireMock.Net.Extensions.Routing.csproj +++ b/src/WireMock.Net.Extensions.Routing/WireMock.Net.Extensions.Routing.csproj @@ -25,7 +25,7 @@ - + diff --git a/src/WireMock.Net.Matchers.SystemTextJsonPath/WireMock.Net.Matchers.SystemTextJsonPath.csproj b/src/WireMock.Net.Matchers.SystemTextJsonPath/WireMock.Net.Matchers.SystemTextJsonPath.csproj index dd139524..9a26d34a 100644 --- a/src/WireMock.Net.Matchers.SystemTextJsonPath/WireMock.Net.Matchers.SystemTextJsonPath.csproj +++ b/src/WireMock.Net.Matchers.SystemTextJsonPath/WireMock.Net.Matchers.SystemTextJsonPath.csproj @@ -1,7 +1,7 @@ - A SystemTextJsonPathMatcher which can be used to match WireMock.Net Requests using JSONPath with System.Text.Json. + A SystemTextJsonPathMatcher which can be used to match WireMock.Net Requests using JsonPath.Net. WireMock.Net.Matchers.SystemTextJsonPath Stef Heyenrath netstandard2.0;net8.0 diff --git a/src/WireMock.Net.Minimal/Serialization/MappingSerializer.cs b/src/WireMock.Net.Minimal/Serialization/MappingSerializer.cs index 5de20e49..86532595 100644 --- a/src/WireMock.Net.Minimal/Serialization/MappingSerializer.cs +++ b/src/WireMock.Net.Minimal/Serialization/MappingSerializer.cs @@ -1,55 +1,31 @@ // Copyright © WireMock.Net using JsonConverter.Abstractions; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -#if NETSTANDARD2_0_OR_GREATER || NETCOREAPP3_1_OR_GREATER || NET6_0_OR_GREATER || NET461 -using System.Text.Json; -#endif +using JsonConverter.Abstractions.Models; namespace WireMock.Serialization; internal class MappingSerializer(IJsonConverter jsonConverter) { - private static readonly JsonConverterOptions JsonConverterOptions = new JsonConverterOptions - { - DateParseHandling = (int) DateParseHandling.None - }; - internal T[] DeserializeJsonToArray(string value) { - // DeserializeObject - return DeserializeObjectToArray(jsonConverter.Deserialize(value, JsonConverterOptions)!); + switch (JsonTypeHelper.GetJsonType(value)) + { + case JsonType.Array: + return jsonConverter.Deserialize(value, JsonSerializationConstants.JsonConverterOptionsWithDateParsingNone)!; + + case JsonType.Object: + var singleResult = jsonConverter.Deserialize(value, JsonSerializationConstants.JsonConverterOptionsWithDateParsingNone); + return [singleResult!]; + + default: + throw new InvalidOperationException("Cannot deserialize the provided value to an array or object."); + } } - internal static T[] DeserializeObjectToArray(object value) + internal T[] DeserializeObjectToArray(object value) { - if (value is JArray jArray) - { - return jArray.ToObject()!; - } - - if (value is JObject jObject) - { - var singleResult = jObject.ToObject(); - return [singleResult!]; - } - -#if NETSTANDARD2_0_OR_GREATER || NETCOREAPP3_1_OR_GREATER || NET6_0_OR_GREATER || NET461 - if (value is JsonElement jElement) - { - if (jElement.ValueKind == JsonValueKind.Array) - { - return jElement.Deserialize()!; - } - - if (jElement.ValueKind == JsonValueKind.Object) - { - var singleResult = jElement.Deserialize(); - return [singleResult!]; - } - } -#endif - throw new InvalidOperationException("Cannot deserialize the provided value to an array or object."); + var json = jsonConverter.Serialize(value, JsonSerializationConstants.JsonConverterOptionsWithDateParsingNone); + return DeserializeJsonToArray(json); } } \ No newline at end of file diff --git a/src/WireMock.Net.Minimal/Server/WireMockServer.Admin.cs b/src/WireMock.Net.Minimal/Server/WireMockServer.Admin.cs index 80e12db6..7460590f 100644 --- a/src/WireMock.Net.Minimal/Server/WireMockServer.Admin.cs +++ b/src/WireMock.Net.Minimal/Server/WireMockServer.Admin.cs @@ -338,7 +338,7 @@ public partial class WireMockServer } o.CorsPolicyOptions = corsPolicyOptions; - o.ClientCertificateMode = (Microsoft.AspNetCore.Server.Kestrel.Https.ClientCertificateMode) _settings.ClientCertificateMode; + o.ClientCertificateMode = (Microsoft.AspNetCore.Server.Kestrel.Https.ClientCertificateMode)_settings.ClientCertificateMode; o.AcceptAnyClientCertificate = _settings.AcceptAnyClientCertificate; }); @@ -834,6 +834,18 @@ public partial class WireMockServer }; } + private T[] DeserializeRequestMessageToArray(IRequestMessage requestMessage) + { + if (requestMessage.BodyData?.DetectedBodyType == BodyType.Json && requestMessage.BodyData.BodyAsJson != null) + { + var bodyAsJson = requestMessage.BodyData.BodyAsJson!; + + return _mappingSerializer.DeserializeObjectToArray(bodyAsJson); + } + + throw new NotSupportedException(); + } + private static Encoding? ToEncoding(EncodingModel? encodingModel) { return encodingModel != null ? Encoding.GetEncoding(encodingModel.CodePage) : null; @@ -853,18 +865,6 @@ public partial class WireMockServer }; } - private static T[] DeserializeRequestMessageToArray(IRequestMessage requestMessage) - { - if (requestMessage.BodyData?.DetectedBodyType == BodyType.Json && requestMessage.BodyData.BodyAsJson != null) - { - var bodyAsJson = requestMessage.BodyData.BodyAsJson!; - - return MappingSerializer.DeserializeObjectToArray(bodyAsJson); - } - - throw new NotSupportedException(); - } - private static T DeserializeObject(IRequestMessage requestMessage) { switch (requestMessage.BodyData?.DetectedBodyType) diff --git a/src/WireMock.Net.NUnit/WireMock.Net.NUnit.csproj b/src/WireMock.Net.NUnit/WireMock.Net.NUnit.csproj index de0ac225..4edff70d 100644 --- a/src/WireMock.Net.NUnit/WireMock.Net.NUnit.csproj +++ b/src/WireMock.Net.NUnit/WireMock.Net.NUnit.csproj @@ -25,7 +25,7 @@ - + diff --git a/src/WireMock.Net.RestClient/WireMock.Net.RestClient.csproj b/src/WireMock.Net.RestClient/WireMock.Net.RestClient.csproj index 688103bd..34dae46c 100644 --- a/src/WireMock.Net.RestClient/WireMock.Net.RestClient.csproj +++ b/src/WireMock.Net.RestClient/WireMock.Net.RestClient.csproj @@ -33,7 +33,7 @@ - + diff --git a/src/WireMock.Net.Shared/Serialization/JsonSerializationConstants.cs b/src/WireMock.Net.Shared/Serialization/JsonSerializationConstants.cs index f1b31ef3..c0f8aa65 100644 --- a/src/WireMock.Net.Shared/Serialization/JsonSerializationConstants.cs +++ b/src/WireMock.Net.Shared/Serialization/JsonSerializationConstants.cs @@ -14,11 +14,17 @@ internal static class JsonSerializationConstants IgnoreNullValues = true }; - //internal static readonly JsonSerializerSettings JsonSerializerSettingsDefault = new() - //{ - // Formatting = Formatting.Indented, - // NullValueHandling = NullValueHandling.Ignore - //}; + internal static readonly JsonConverterOptions JsonConverterOptionsIncludeNullValues = new() + { + WriteIndented = true, + IgnoreNullValues = false + }; + + internal static readonly JsonConverterOptions JsonConverterOptionsWithDateParsingNone = new() + { + WriteIndented = true, + DateParseHandling = 0 + }; internal static readonly JsonSerializerSettings JsonSerializerSettingsIncludeNullValues = new() { diff --git a/src/WireMock.Net.Shared/WireMock.Net.Shared.csproj b/src/WireMock.Net.Shared/WireMock.Net.Shared.csproj index b71a5cca..def7cf73 100644 --- a/src/WireMock.Net.Shared/WireMock.Net.Shared.csproj +++ b/src/WireMock.Net.Shared/WireMock.Net.Shared.csproj @@ -30,7 +30,7 @@ - + diff --git a/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj b/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj index d66fd007..360bd85c 100644 --- a/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj +++ b/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj @@ -76,7 +76,7 @@ - +