// Copyright © WireMock.Net using System; using JsonConverter.Abstractions; using Newtonsoft.Json.Linq; #if NETSTANDARD2_0_OR_GREATER || NETCOREAPP3_1_OR_GREATER || NET6_0_OR_GREATER || NET461 using System.Text.Json; #endif namespace WireMock.Serialization; internal class MappingSerializer(IJsonConverter jsonConverter) { internal T[] DeserializeJsonToArray(string value) { return DeserializeObjectToArray(jsonConverter.Deserialize(value)!); } internal static 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."); } }