mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-07-02 02:51:50 +02:00
delete jsonutils.cs
This commit is contained in:
@@ -31,19 +31,19 @@ public partial class WireMockAssertions
|
|||||||
}
|
}
|
||||||
|
|
||||||
[CustomAssertion]
|
[CustomAssertion]
|
||||||
public AndConstraint<WireMockAssertions> WithBodyAsJson(object body, string because = "", params object[] becauseArgs)
|
public AndConstraint<WireMockAssertions> WithBodyAsJson(object body, IJsonMatcher? jsonMatcher = null, string because = "", params object[] becauseArgs)
|
||||||
{
|
{
|
||||||
return WithBodyAsJson(new JsonMatcher(body), because, becauseArgs);
|
return WithBodyAsJson(jsonMatcher ?? new JsonMatcher(body), because, becauseArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CustomAssertion]
|
[CustomAssertion]
|
||||||
public AndConstraint<WireMockAssertions> WithBodyAsJson(string body, string because = "", params object[] becauseArgs)
|
public AndConstraint<WireMockAssertions> WithBodyAsJson(string body, IJsonMatcher? jsonMatcher = null, string because = "", params object[] becauseArgs)
|
||||||
{
|
{
|
||||||
return WithBodyAsJson(new JsonMatcher(body), because, becauseArgs);
|
return WithBodyAsJson(jsonMatcher ?? new JsonMatcher(body), because, becauseArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CustomAssertion]
|
[CustomAssertion]
|
||||||
public AndConstraint<WireMockAssertions> WithBodyAsJson(IObjectMatcher matcher, string because = "", params object[] becauseArgs)
|
public AndConstraint<WireMockAssertions> WithBodyAsJson(IJsonMatcher matcher, string because = "", params object[] becauseArgs)
|
||||||
{
|
{
|
||||||
var (filter, condition) = BuildFilterAndCondition(r => r.BodyAsJson, matcher);
|
var (filter, condition) = BuildFilterAndCondition(r => r.BodyAsJson, matcher);
|
||||||
|
|
||||||
@@ -126,15 +126,44 @@ public partial class WireMockAssertions
|
|||||||
|
|
||||||
private static string? FormatBody(object? body)
|
private static string? FormatBody(object? body)
|
||||||
{
|
{
|
||||||
return body switch
|
if (body == null)
|
||||||
{
|
{
|
||||||
null => null,
|
return null;
|
||||||
string str => str,
|
}
|
||||||
AnyOf<string, StringPattern>[] stringPatterns => FormatBodies(stringPatterns.Select(p => p.GetPattern())),
|
|
||||||
byte[] bytes => $"byte[{bytes.Length}] {{...}}",
|
if (body is string str)
|
||||||
JToken jToken => jToken.ToString(Formatting.None),
|
{
|
||||||
_ => JToken.FromObject(body).ToString(Formatting.None)
|
return str;
|
||||||
};
|
}
|
||||||
|
|
||||||
|
if (body is AnyOf<string, StringPattern>[] stringPatterns)
|
||||||
|
{
|
||||||
|
return FormatBodies(stringPatterns.Select(p => p.GetPattern()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body is byte[] bytes)
|
||||||
|
{
|
||||||
|
return $"byte[{bytes.Length}] {{...}}";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body is JToken jToken)
|
||||||
|
{
|
||||||
|
return jToken.ToString(Formatting.None);
|
||||||
|
}
|
||||||
|
|
||||||
|
// System.IO.FileNotFoundException : Could not load file or assembly 'System.Text.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The system cannot find the file specified.
|
||||||
|
var typeName = body.GetType().FullName;
|
||||||
|
if (typeName == "System.Text.Json.JsonElement")
|
||||||
|
{
|
||||||
|
return ((dynamic)body).GetRawText();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeName == "System.Text.Json.JsonDocument")
|
||||||
|
{
|
||||||
|
return ((dynamic)body).RootElement.GetRawText();
|
||||||
|
}
|
||||||
|
|
||||||
|
return JToken.FromObject(body).ToString(Formatting.None);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string? FormatBodies(IEnumerable<object?> bodies)
|
private static string? FormatBodies(IEnumerable<object?> bodies)
|
||||||
|
|||||||
@@ -31,19 +31,19 @@ public partial class WireMockAssertions
|
|||||||
}
|
}
|
||||||
|
|
||||||
[CustomAssertion]
|
[CustomAssertion]
|
||||||
public AndConstraint<WireMockAssertions> WithBodyAsJson(object body, string because = "", params object[] becauseArgs)
|
public AndConstraint<WireMockAssertions> WithBodyAsJson(object body, IJsonMatcher? jsonMatcher = null, string because = "", params object[] becauseArgs)
|
||||||
{
|
{
|
||||||
return WithBodyAsJson(new JsonMatcher(body), because, becauseArgs);
|
return WithBodyAsJson(jsonMatcher ?? new JsonMatcher(body), because, becauseArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CustomAssertion]
|
[CustomAssertion]
|
||||||
public AndConstraint<WireMockAssertions> WithBodyAsJson(string body, string because = "", params object[] becauseArgs)
|
public AndConstraint<WireMockAssertions> WithBodyAsJson(string body, IJsonMatcher? jsonMatcher = null, string because = "", params object[] becauseArgs)
|
||||||
{
|
{
|
||||||
return WithBodyAsJson(new JsonMatcher(body), because, becauseArgs);
|
return WithBodyAsJson(jsonMatcher ?? new JsonMatcher(body), because, becauseArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CustomAssertion]
|
[CustomAssertion]
|
||||||
public AndConstraint<WireMockAssertions> WithBodyAsJson(IObjectMatcher matcher, string because = "", params object[] becauseArgs)
|
public AndConstraint<WireMockAssertions> WithBodyAsJson(IJsonMatcher matcher, string because = "", params object[] becauseArgs)
|
||||||
{
|
{
|
||||||
var (filter, condition) = BuildFilterAndCondition(r => r.BodyAsJson, matcher);
|
var (filter, condition) = BuildFilterAndCondition(r => r.BodyAsJson, matcher);
|
||||||
|
|
||||||
@@ -126,15 +126,44 @@ public partial class WireMockAssertions
|
|||||||
|
|
||||||
private static string? FormatBody(object? body)
|
private static string? FormatBody(object? body)
|
||||||
{
|
{
|
||||||
return body switch
|
if (body == null)
|
||||||
{
|
{
|
||||||
null => null,
|
return null;
|
||||||
string str => str,
|
}
|
||||||
AnyOf<string, StringPattern>[] stringPatterns => FormatBodies(stringPatterns.Select(p => p.GetPattern())),
|
|
||||||
byte[] bytes => $"byte[{bytes.Length}] {{...}}",
|
if (body is string str)
|
||||||
JToken jToken => jToken.ToString(Formatting.None),
|
{
|
||||||
_ => JToken.FromObject(body).ToString(Formatting.None)
|
return str;
|
||||||
};
|
}
|
||||||
|
|
||||||
|
if (body is AnyOf<string, StringPattern>[] stringPatterns)
|
||||||
|
{
|
||||||
|
return FormatBodies(stringPatterns.Select(p => p.GetPattern()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body is byte[] bytes)
|
||||||
|
{
|
||||||
|
return $"byte[{bytes.Length}] {{...}}";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body is JToken jToken)
|
||||||
|
{
|
||||||
|
return jToken.ToString(Formatting.None);
|
||||||
|
}
|
||||||
|
|
||||||
|
// System.IO.FileNotFoundException : Could not load file or assembly 'System.Text.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The system cannot find the file specified.
|
||||||
|
var typeName = body.GetType().FullName;
|
||||||
|
if (typeName == "System.Text.Json.JsonElement")
|
||||||
|
{
|
||||||
|
return ((dynamic)body).GetRawText();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeName == "System.Text.Json.JsonDocument")
|
||||||
|
{
|
||||||
|
return ((dynamic)body).RootElement.GetRawText();
|
||||||
|
}
|
||||||
|
|
||||||
|
return JToken.FromObject(body).ToString(Formatting.None);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string? FormatBodies(IEnumerable<object?> bodies)
|
private static string? FormatBodies(IEnumerable<object?> bodies)
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
// Copyright © WireMock.Net
|
// Copyright © WireMock.Net
|
||||||
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Newtonsoft.Json;
|
||||||
using WireMock.Admin.Mappings;
|
using WireMock.Admin.Mappings;
|
||||||
using WireMock.Extensions;
|
using WireMock.Extensions;
|
||||||
using WireMock.Pact.Models.V2;
|
using WireMock.Pact.Models.V2;
|
||||||
@@ -49,7 +51,7 @@ internal static class PactMapper
|
|||||||
pact.Interactions.Add(interaction);
|
pact.Interactions.Add(interaction);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (filename, JsonUtils.SerializeAsPactFile(pact));
|
return (filename, SerializeAsPactFile(pact));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static PactRequest MapRequest(RequestModel request, string path)
|
private static PactRequest MapRequest(RequestModel request, string path)
|
||||||
@@ -152,7 +154,7 @@ internal static class PactMapper
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private static object? TryDeserializeJsonStringAsObject(string? value)
|
private static object? TryDeserializeJsonStringAsObject(string? value)
|
||||||
{
|
{
|
||||||
return value != null ? JsonUtils.TryDeserializeObject<object?>(value) ?? value : null;
|
return value != null ? TryDeserializeObject<object?>(value) ?? value : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
//private static string GetPatternAsStringFromMatchers(MatcherModel[]? matchers, string defaultValue)
|
//private static string GetPatternAsStringFromMatchers(MatcherModel[]? matchers, string defaultValue)
|
||||||
@@ -164,4 +166,22 @@ internal static class PactMapper
|
|||||||
|
|
||||||
// return defaultValue;
|
// return defaultValue;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
private static byte[] SerializeAsPactFile(object value)
|
||||||
|
{
|
||||||
|
var json = JsonConvert.SerializeObject(value, JsonSerializationConstants.JsonSerializerSettingsPact);
|
||||||
|
return Encoding.UTF8.GetBytes(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static T? TryDeserializeObject<T>(string json)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return JsonConvert.DeserializeObject<T>(json);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return default;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
// Copyright © WireMock.Net
|
// Copyright © WireMock.Net
|
||||||
|
|
||||||
using System.Linq;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
using NJsonSchema;
|
using NJsonSchema;
|
||||||
using NJsonSchema.Extensions;
|
using NJsonSchema.Extensions;
|
||||||
using NSwag;
|
using NSwag;
|
||||||
@@ -281,7 +282,7 @@ internal static class SwaggerMapper
|
|||||||
if (matcher is { Name: nameof(JsonMatcher) })
|
if (matcher is { Name: nameof(JsonMatcher) })
|
||||||
{
|
{
|
||||||
var pattern = GetPatternAsStringFromMatcher(matcher);
|
var pattern = GetPatternAsStringFromMatcher(matcher);
|
||||||
if (JsonUtils.TryParseAsJObject(pattern, out var jObject))
|
if (TryParseAsJObject(pattern, out var jObject))
|
||||||
{
|
{
|
||||||
return jObject;
|
return jObject;
|
||||||
}
|
}
|
||||||
@@ -292,6 +293,39 @@ internal static class SwaggerMapper
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool IsJson(string? value)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(value))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
value = value!.Trim();
|
||||||
|
|
||||||
|
return (value.StartsWith("{") && value.EndsWith("}")) || (value.StartsWith("[") && value.EndsWith("]"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool TryParseAsJObject(string? strInput, [NotNullWhen(true)] out JObject? value)
|
||||||
|
{
|
||||||
|
value = null;
|
||||||
|
|
||||||
|
if (!IsJson(strInput))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Try to convert this string into a JObject
|
||||||
|
value = JObject.Parse(strInput!);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static string GetContentType(RequestModel request)
|
private static string GetContentType(RequestModel request)
|
||||||
{
|
{
|
||||||
var contentType = request.Headers?.FirstOrDefault(h => h.Name == "Content-Type");
|
var contentType = request.Headers?.FirstOrDefault(h => h.Name == "Content-Type");
|
||||||
|
|||||||
+41
-12
@@ -32,15 +32,15 @@ public partial class WireMockAdminApiAssertions
|
|||||||
}
|
}
|
||||||
|
|
||||||
[CustomAssertion]
|
[CustomAssertion]
|
||||||
public AndConstraint<WireMockAdminApiAssertions> WithBodyAsJson(object body, string because = "", params object[] becauseArgs)
|
public AndConstraint<WireMockAdminApiAssertions> WithBodyAsJson(object body, IJsonMatcher? jsonMatcher = null, string because = "", params object[] becauseArgs)
|
||||||
{
|
{
|
||||||
return WithBodyAsJson(new JsonMatcher(body), because, becauseArgs);
|
return WithBodyAsJson(jsonMatcher ?? new JsonMatcher(body), because, becauseArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CustomAssertion]
|
[CustomAssertion]
|
||||||
public AndConstraint<WireMockAdminApiAssertions> WithBodyAsJson(string body, string because = "", params object[] becauseArgs)
|
public AndConstraint<WireMockAdminApiAssertions> WithBodyAsJson(string body, IJsonMatcher? jsonMatcher = null, string because = "", params object[] becauseArgs)
|
||||||
{
|
{
|
||||||
return WithBodyAsJson(new JsonMatcher(body), because, becauseArgs);
|
return WithBodyAsJson(jsonMatcher ?? new JsonMatcher(body), because, becauseArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CustomAssertion]
|
[CustomAssertion]
|
||||||
@@ -127,15 +127,44 @@ public partial class WireMockAdminApiAssertions
|
|||||||
|
|
||||||
private static string? FormatBody(object? body)
|
private static string? FormatBody(object? body)
|
||||||
{
|
{
|
||||||
return body switch
|
if (body == null)
|
||||||
{
|
{
|
||||||
null => null,
|
return null;
|
||||||
string str => str,
|
}
|
||||||
AnyOf<string, StringPattern>[] stringPatterns => FormatBodies(stringPatterns.Select(p => p.GetPattern())),
|
|
||||||
byte[] bytes => $"byte[{bytes.Length}] {{...}}",
|
if (body is string str)
|
||||||
JToken jToken => jToken.ToString(Formatting.None),
|
{
|
||||||
_ => JToken.FromObject(body).ToString(Formatting.None)
|
return str;
|
||||||
};
|
}
|
||||||
|
|
||||||
|
if (body is AnyOf<string, StringPattern>[] stringPatterns)
|
||||||
|
{
|
||||||
|
return FormatBodies(stringPatterns.Select(p => p.GetPattern()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body is byte[] bytes)
|
||||||
|
{
|
||||||
|
return $"byte[{bytes.Length}] {{...}}";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body is JToken jToken)
|
||||||
|
{
|
||||||
|
return jToken.ToString(Formatting.None);
|
||||||
|
}
|
||||||
|
|
||||||
|
// System.IO.FileNotFoundException : Could not load file or assembly 'System.Text.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The system cannot find the file specified.
|
||||||
|
var typeName = body.GetType().FullName;
|
||||||
|
if (typeName == "System.Text.Json.JsonElement")
|
||||||
|
{
|
||||||
|
return ((dynamic)body).GetRawText();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeName == "System.Text.Json.JsonDocument")
|
||||||
|
{
|
||||||
|
return ((dynamic)body).RootElement.GetRawText();
|
||||||
|
}
|
||||||
|
|
||||||
|
return JToken.FromObject(body).ToString(Formatting.None);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string? FormatBodies(IEnumerable<object?> bodies)
|
private static string? FormatBodies(IEnumerable<object?> bodies)
|
||||||
|
|||||||
@@ -26,12 +26,6 @@ internal static class JsonSerializationConstants
|
|||||||
DateParseHandling = 0
|
DateParseHandling = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
internal static readonly JsonSerializerSettings JsonSerializerSettingsIncludeNullValues = new()
|
|
||||||
{
|
|
||||||
Formatting = Formatting.Indented,
|
|
||||||
NullValueHandling = NullValueHandling.Include
|
|
||||||
};
|
|
||||||
|
|
||||||
internal static readonly JsonSerializerSettings JsonDeserializerSettingsWithDateParsingNone = new()
|
internal static readonly JsonSerializerSettings JsonDeserializerSettingsWithDateParsingNone = new()
|
||||||
{
|
{
|
||||||
DateParseHandling = DateParseHandling.None
|
DateParseHandling = DateParseHandling.None
|
||||||
|
|||||||
@@ -1,74 +0,0 @@
|
|||||||
// Copyright © WireMock.Net
|
|
||||||
|
|
||||||
using System.Diagnostics.CodeAnalysis;
|
|
||||||
using System.Text;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using Newtonsoft.Json.Linq;
|
|
||||||
using WireMock.Serialization;
|
|
||||||
|
|
||||||
namespace WireMock.Util;
|
|
||||||
|
|
||||||
internal static class JsonUtils
|
|
||||||
{
|
|
||||||
public static bool IsJson(string? value)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrWhiteSpace(value))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
value = value!.Trim();
|
|
||||||
|
|
||||||
return (value.StartsWith("{") && value.EndsWith("}")) || (value.StartsWith("[") && value.EndsWith("]"));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool TryParseAsJObject(string? strInput, [NotNullWhen(true)] out JObject? value)
|
|
||||||
{
|
|
||||||
value = null;
|
|
||||||
|
|
||||||
if (!IsJson(strInput))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// Try to convert this string into a JObject
|
|
||||||
value = JObject.Parse(strInput!);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static byte[] SerializeAsPactFile(object value)
|
|
||||||
{
|
|
||||||
var json = JsonConvert.SerializeObject(value, JsonSerializationConstants.JsonSerializerSettingsPact);
|
|
||||||
return Encoding.UTF8.GetBytes(json);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Deserializes the JSON to a .NET object.
|
|
||||||
/// Using : DateParseHandling = DateParseHandling.None
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="json">A System.String that contains JSON.</param>
|
|
||||||
/// <returns>The deserialized object from the JSON string.</returns>
|
|
||||||
public static object DeserializeObject(string json)
|
|
||||||
{
|
|
||||||
return JsonConvert.DeserializeObject(json, JsonSerializationConstants.JsonDeserializerSettingsWithDateParsingNone)!;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static T? TryDeserializeObject<T>(string json)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return JsonConvert.DeserializeObject<T>(json);
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
return default;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user