From babf1125ff5cd3d30de9975979f11635fe79c28e Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Thu, 6 Feb 2025 10:56:43 +0100 Subject: [PATCH] Refactor ArgumentJsonConverter to improve type alias handling Introduced logic to handle type aliases more accurately for arrays and collections. Enhanced the final type alias determination by accommodating cases where type aliases are present. Cleaned up unnecessary whitespace for better code readability. --- .../Serialization/ArgumentJsonConverter.cs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/modules/Elsa.Workflows.Api/Serialization/ArgumentJsonConverter.cs b/src/modules/Elsa.Workflows.Api/Serialization/ArgumentJsonConverter.cs index fc829f41c..2af9c2334 100644 --- a/src/modules/Elsa.Workflows.Api/Serialization/ArgumentJsonConverter.cs +++ b/src/modules/Elsa.Workflows.Api/Serialization/ArgumentJsonConverter.cs @@ -20,13 +20,13 @@ public class ArgumentJsonConverter : JsonConverter { _wellKnownTypeRegistry = wellKnownTypeRegistry; } - + /// public override void Write(Utf8JsonWriter writer, ArgumentDefinition value, JsonSerializerOptions options) { var newOptions = new JsonSerializerOptions(options); newOptions.Converters.RemoveWhere(x => x is ArgumentJsonConverterFactory); - + var jsonObject = (JsonObject)JsonSerializer.SerializeToNode(value, value.GetType(), newOptions)!; var typeName = value.Type; var typeAlias = _wellKnownTypeRegistry.TryGetAlias(typeName, out var alias) ? alias : null; @@ -34,11 +34,12 @@ public class ArgumentJsonConverter : JsonConverter var isCollection = typeName.IsCollectionType(); var elementTypeName = isArray ? typeName.GetElementType() : isCollection ? typeName.GenericTypeArguments[0] : typeName; var elementTypeAlias = _wellKnownTypeRegistry.GetAliasOrDefault(elementTypeName); - var finalTypeAlias = isArray || isCollection ? elementTypeAlias : typeAlias; - - if(isArray) jsonObject["isArray"] = isArray; - if(isCollection) jsonObject["isCollection"] = isCollection; - + var isAliasedArray = (isArray || isCollection) && typeAlias != null; + var finalTypeAlias = isArray || isCollection ? typeAlias ?? elementTypeAlias : elementTypeAlias; + + if (isArray && !isAliasedArray) jsonObject["isArray"] = isArray; + if (isCollection) jsonObject["isCollection"] = isCollection; + jsonObject["type"] = finalTypeAlias; JsonSerializer.Serialize(writer, jsonObject, newOptions); }