diff --git a/src/WireMock.Net/ResponseBuilders/Response.cs b/src/WireMock.Net/ResponseBuilders/Response.cs index 9d716286..752e8e8e 100644 --- a/src/WireMock.Net/ResponseBuilders/Response.cs +++ b/src/WireMock.Net/ResponseBuilders/Response.cs @@ -252,7 +252,7 @@ namespace WireMock.ResponseBuilders case BodyDestinationFormat.Json: ResponseMessage.BodyData.DetectedBodyType = BodyType.Json; - ResponseMessage.BodyData.BodyAsJson = JsonConvert.DeserializeObject(body); + ResponseMessage.BodyData.BodyAsJson = JsonUtils.DeserializeObject(body); break; default: diff --git a/src/WireMock.Net/Server/FluentMockServer.Admin.cs b/src/WireMock.Net/Server/FluentMockServer.Admin.cs index 94d94e19..94f4f9e1 100644 --- a/src/WireMock.Net/Server/FluentMockServer.Admin.cs +++ b/src/WireMock.Net/Server/FluentMockServer.Admin.cs @@ -1,3 +1,6 @@ +using JetBrains.Annotations; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.IO; @@ -5,9 +8,6 @@ using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; -using JetBrains.Annotations; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; using WireMock.Admin.Mappings; using WireMock.Admin.Scenarios; using WireMock.Admin.Settings; @@ -179,8 +179,10 @@ namespace WireMock.Server _settings.Logger.Info($"Watching folder '{folder}'{includeSubdirectoriesText} for new, updated and deleted MappingFiles."); - var watcher = new EnhancedFileSystemWatcher(folder, "*.json", EnhancedFileSystemWatcherTimeoutMs); - watcher.IncludeSubdirectories = includeSubdirectories; + var watcher = new EnhancedFileSystemWatcher(folder, "*.json", EnhancedFileSystemWatcherTimeoutMs) + { + IncludeSubdirectories = includeSubdirectories + }; watcher.Created += (sender, args) => { @@ -229,7 +231,7 @@ namespace WireMock.Server if (FileHelper.TryReadMappingFileWithRetryAndDelay(_settings.FileSystemHandler, path, out string value)) { - var mappingModels = DeserializeObjectToArray(JsonConvert.DeserializeObject(value)); + var mappingModels = DeserializeObjectToArray(JsonUtils.DeserializeObject(value)); foreach (var mappingModel in mappingModels) { if (mappingModels.Length == 1 && Guid.TryParse(filenameWithoutExtension, out Guid guidFromFilename)) @@ -882,7 +884,7 @@ namespace WireMock.Server { if (requestMessage?.BodyData?.DetectedBodyType == BodyType.String) { - return JsonConvert.DeserializeObject(requestMessage.BodyData.BodyAsString); + return JsonUtils.DeserializeObject(requestMessage.BodyData.BodyAsString); } if (requestMessage?.BodyData?.DetectedBodyType == BodyType.Json) diff --git a/src/WireMock.Net/Util/BodyParser.cs b/src/WireMock.Net/Util/BodyParser.cs index 46534560..c9e5acb1 100644 --- a/src/WireMock.Net/Util/BodyParser.cs +++ b/src/WireMock.Net/Util/BodyParser.cs @@ -57,8 +57,6 @@ namespace WireMock.Util new WildcardMatcher("application/x-www-form-urlencoded", true) }; - private static readonly JsonSerializerSettings JsonSerializerSettings = new JsonSerializerSettings { DateParseHandling = DateParseHandling.None }; - public static bool ShouldParseBody([CanBeNull] string httpMethod, bool allowBodyForAllHttpMethods) { if (string.IsNullOrEmpty(httpMethod)) @@ -147,7 +145,7 @@ namespace WireMock.Util { try { - data.BodyAsJson = JsonConvert.DeserializeObject(data.BodyAsString, JsonSerializerSettings); + data.BodyAsJson = JsonUtils.DeserializeObject(data.BodyAsString); data.DetectedBodyType = BodyType.Json; } catch diff --git a/src/WireMock.Net/Util/JsonUtils.cs b/src/WireMock.Net/Util/JsonUtils.cs index 3340f1da..09beeafb 100644 --- a/src/WireMock.Net/Util/JsonUtils.cs +++ b/src/WireMock.Net/Util/JsonUtils.cs @@ -25,6 +25,28 @@ namespace WireMock.Util return JsonConvert.DeserializeObject(json, JsonSerializerSettings); } + /// + /// Deserializes the JSON to a .NET object. + /// Using : DateParseHandling = DateParseHandling.None + /// + /// A System.String that contains JSON. + /// The deserialized object from the JSON string. + public static object DeserializeObject(string json) + { + return JsonConvert.DeserializeObject(json, JsonSerializerSettings); + } + + /// + /// Deserializes the JSON to the specified .NET type. + /// Using : DateParseHandling = DateParseHandling.None + /// + /// A System.String that contains JSON. + /// The deserialized object from the JSON string. + public static T DeserializeObject(string json) + { + return JsonConvert.DeserializeObject(json, JsonSerializerSettings); + } + public static T ParseJTokenToObject(object value) { switch (value)