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 2bffa845..ce12dec3 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.Minimal/Matchers/JsonMatcher.cs b/src/WireMock.Net.Minimal/Matchers/JsonMatcher.cs index 51635dac..1957e497 100644 --- a/src/WireMock.Net.Minimal/Matchers/JsonMatcher.cs +++ b/src/WireMock.Net.Minimal/Matchers/JsonMatcher.cs @@ -1,10 +1,12 @@ // Copyright © WireMock.Net +using System.Collections; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Stef.Validation; using WireMock.Extensions; +using WireMock.Serialization; using WireMock.Util; -using JsonUtils = WireMock.Util.JsonUtils; namespace WireMock.Matchers; @@ -68,7 +70,7 @@ public class JsonMatcher : IJsonMatcher Regex = regex; Value = value; - _valueAsJToken = JsonUtils.ConvertValueToJToken(value); + _valueAsJToken = ConvertValueToJToken(value); } /// @@ -82,7 +84,7 @@ public class JsonMatcher : IJsonMatcher { try { - var inputAsJToken = JsonUtils.ConvertValueToJToken(input); + var inputAsJToken = ConvertValueToJToken(input); var match = IsMatch(RenameJToken(_valueAsJToken), RenameJToken(inputAsJToken)); score = MatchScores.ToScore(match); @@ -102,7 +104,7 @@ public class JsonMatcher : IJsonMatcher return $"new {Name}" + $"(" + $"{MatchBehaviour.GetFullyQualifiedEnumValue()}, " + - $"{CSharpFormatter.ConvertToAnonymousObjectDefinition(Value, 3)}, " + + $"{CSharpFormatter.ConvertToAnonymousObjectDefinition(Value, 3)}, " + $"{CSharpFormatter.ToCSharpBooleanLiteral(IgnoreCase)}, " + $"{CSharpFormatter.ToCSharpBooleanLiteral(Regex)}" + $")"; @@ -240,6 +242,18 @@ public class JsonMatcher : IJsonMatcher return new JObject(renamedProperties); } + private static JToken ConvertValueToJToken(object value) + { + // Check if JToken, string, IEnumerable or object + return value switch + { + JToken tokenValue => tokenValue, + string stringValue => JsonConvert.DeserializeObject(stringValue, JsonSerializationConstants.JsonDeserializerSettingsWithDateParsingNone)!, + IEnumerable enumerableValue => JArray.FromObject(enumerableValue), + _ => JObject.FromObject(value), + }; + } + private static string? ToUpper(string? input) { return input?.ToUpperInvariant(); diff --git a/src/WireMock.Net.Minimal/ResponseBuilders/Response.cs b/src/WireMock.Net.Minimal/ResponseBuilders/Response.cs index 52343d8a..fdd9b575 100644 --- a/src/WireMock.Net.Minimal/ResponseBuilders/Response.cs +++ b/src/WireMock.Net.Minimal/ResponseBuilders/Response.cs @@ -197,7 +197,7 @@ public partial class Response : IResponseBuilder if (ProxyAndRecordSettings != null && _httpClientForProxy != null) { - string RemoveFirstOccurrence(string source, string find) + static string RemoveFirstOccurrence(string source, string find) { int place = source.IndexOf(find, StringComparison.OrdinalIgnoreCase); return place >= 0 ? source.Remove(place, find.Length) : source; @@ -265,7 +265,7 @@ public partial class Response : IResponseBuilder var decoded = await protoBufMatcher.DecodeAsync(requestMessage.BodyData?.BodyAsBytes).ConfigureAwait(false); if (decoded != null) { - requestMessageImplementation.BodyAsJson = JsonUtils.ConvertValueToJToken(decoded); + requestMessageImplementation.BodyAsJson = settings.DefaultJsonSerializer.ToJsonToken(decoded); } } } diff --git a/src/WireMock.Net.Minimal/Server/WireMockServer.Admin.cs b/src/WireMock.Net.Minimal/Server/WireMockServer.Admin.cs index 225623ad..ed92e458 100644 --- a/src/WireMock.Net.Minimal/Server/WireMockServer.Admin.cs +++ b/src/WireMock.Net.Minimal/Server/WireMockServer.Admin.cs @@ -914,16 +914,16 @@ public partial class WireMockServer }; } - private static T DeserializeObject(IRequestMessage requestMessage) + private T DeserializeObject(IRequestMessage requestMessage) { switch (requestMessage.BodyData?.DetectedBodyType) { - case BodyType.String: - case BodyType.FormUrlEncoded: - return JsonUtils.DeserializeObject(requestMessage.BodyData.BodyAsString!); + case BodyType.String when requestMessage.BodyData?.BodyAsString != null: + case BodyType.FormUrlEncoded when requestMessage.BodyData?.BodyAsString != null: + return _settings.DefaultJsonSerializer.Deserialize(requestMessage.BodyData.BodyAsString)!; case BodyType.Json when requestMessage.BodyData?.BodyAsJson != null: - return ((JObject)requestMessage.BodyData.BodyAsJson).ToObject()!; + return _settings.DefaultJsonSerializer.ParseJsonToken(requestMessage.BodyData.BodyAsJson)!; default: throw new NotSupportedException(); diff --git a/src/WireMock.Net.Minimal/Server/WireMockServer.ConvertMapping.cs b/src/WireMock.Net.Minimal/Server/WireMockServer.ConvertMapping.cs index fa27c1a2..9c6f80f6 100644 --- a/src/WireMock.Net.Minimal/Server/WireMockServer.ConvertMapping.cs +++ b/src/WireMock.Net.Minimal/Server/WireMockServer.ConvertMapping.cs @@ -1,6 +1,5 @@ // Copyright © WireMock.Net -using System.Linq; using Stef.Validation; using WireMock.Admin.Mappings; using WireMock.Matchers; @@ -153,7 +152,7 @@ public partial class WireMockServer } else { - var clientIPModel = JsonUtils.ParseJTokenToObject(requestModel.ClientIP); + var clientIPModel = _settings.DefaultJsonSerializer.ParseJsonToken(requestModel.ClientIP); if (clientIPModel.Matchers != null) { requestBuilder = requestBuilder.WithPath(clientIPModel.Matchers.Select(_matcherMapper.Map).OfType().ToArray()); @@ -169,7 +168,7 @@ public partial class WireMockServer } else { - var pathModel = JsonUtils.ParseJTokenToObject(requestModel.Path); + var pathModel = _settings.DefaultJsonSerializer.ParseJsonToken(requestModel.Path); if (pathModel.Matchers != null) { var matchOperator = StringUtils.ParseMatchOperator(pathModel.MatchOperator); @@ -185,7 +184,7 @@ public partial class WireMockServer } else { - var urlModel = JsonUtils.ParseJTokenToObject(requestModel.Url); + var urlModel = _settings.DefaultJsonSerializer.ParseJsonToken(requestModel.Url); if (urlModel.Matchers != null) { var matchOperator = StringUtils.ParseMatchOperator(urlModel.MatchOperator); @@ -271,7 +270,7 @@ public partial class WireMockServer return requestBuilder; } - private static IResponseBuilder InitResponseBuilder(ResponseModel responseModel) + private IResponseBuilder InitResponseBuilder(ResponseModel responseModel) { var responseBuilder = Response.Create(); @@ -336,7 +335,7 @@ public partial class WireMockServer } else { - var headers = JsonUtils.ParseJTokenToObject(entry.Value); + var headers = _settings.DefaultJsonSerializer.ParseJsonToken(entry.Value); responseBuilder.WithHeader(entry.Key, headers); } } @@ -362,7 +361,7 @@ public partial class WireMockServer } else { - var headers = JsonUtils.ParseJTokenToObject(entry.Value); + var headers = _settings.DefaultJsonSerializer.ParseJsonToken(entry.Value); responseBuilder.WithTrailingHeader(entry.Key, headers); } } diff --git a/src/WireMock.Net.NUnit/WireMock.Net.NUnit.csproj b/src/WireMock.Net.NUnit/WireMock.Net.NUnit.csproj index 4edff70d..5a73b4ad 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 34dae46c..85c1e331 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/Util/JsonUtils.cs b/src/WireMock.Net.Shared/Util/JsonUtils.cs index 448d8359..4b558a4a 100644 --- a/src/WireMock.Net.Shared/Util/JsonUtils.cs +++ b/src/WireMock.Net.Shared/Util/JsonUtils.cs @@ -1,6 +1,5 @@ // Copyright © WireMock.Net -using System.Collections; using System.Diagnostics.CodeAnalysis; using System.Text; using Newtonsoft.Json; @@ -50,17 +49,6 @@ internal static class JsonUtils return Encoding.UTF8.GetBytes(json); } - /// - /// Load a Newtonsoft.Json.Linq.JObject from a string that contains JSON. - /// Using : DateParseHandling = DateParseHandling.None - /// - /// A System.String that contains JSON. - /// A Newtonsoft.Json.Linq.JToken populated from the string that contains JSON. - public static JToken Parse(string json) - { - return JsonConvert.DeserializeObject(json, JsonSerializationConstants.JsonDeserializerSettingsWithDateParsingNone)!; - } - /// /// Deserializes the JSON to a .NET object. /// Using : DateParseHandling = DateParseHandling.None @@ -94,38 +82,4 @@ internal static class JsonUtils return default; } } - - public static T ParseJTokenToObject(object? value) - { - if (value != null && value.GetType() == typeof(T)) - { - return (T)value; - } - - return value switch - { - JToken tokenValue => tokenValue.ToObject()!, - - _ => throw new NotSupportedException($"Unable to convert value to {typeof(T)}.") - }; - } - - public static JToken ConvertValueToJToken(object value) - { - // Check if JToken, string, IEnumerable or object - switch (value) - { - case JToken tokenValue: - return tokenValue; - - case string stringValue: - return Parse(stringValue); - - case IEnumerable enumerableValue: - return JArray.FromObject(enumerableValue); - - default: - return JObject.FromObject(value); - } - } } \ No newline at end of file diff --git a/src/WireMock.Net.Shared/WireMock.Net.Shared.csproj b/src/WireMock.Net.Shared/WireMock.Net.Shared.csproj index 981b915d..ac51c510 100644 --- a/src/WireMock.Net.Shared/WireMock.Net.Shared.csproj +++ b/src/WireMock.Net.Shared/WireMock.Net.Shared.csproj @@ -30,8 +30,8 @@ - - + +