diff --git a/src/modules/Elsa.Workflows.Core/Serialization/Converters/PolymorphicObjectConverter.cs b/src/modules/Elsa.Workflows.Core/Serialization/Converters/PolymorphicObjectConverter.cs index 49eeeb940..f8121b24d 100644 --- a/src/modules/Elsa.Workflows.Core/Serialization/Converters/PolymorphicObjectConverter.cs +++ b/src/modules/Elsa.Workflows.Core/Serialization/Converters/PolymorphicObjectConverter.cs @@ -93,9 +93,9 @@ public class PolymorphicObjectConverter(IWellKnownTypeRegistry wellKnownTypeRegi if (isDictionary) { // Remove the _type property name from the JSON, if any. - var parsedModel = (JsonObject)JsonNode.Parse(ref reader)!; - parsedModel.Remove(TypePropertyName); - return parsedModel.Deserialize(targetType, newOptions)!; + var parsedNode = JsonNode.Parse(ref reader)!; + if (parsedNode is JsonObject parsedModel) parsedModel.Remove(TypePropertyName); + return parsedNode.Deserialize(targetType, newOptions)!; } var isCollection = typeof(ICollection).IsAssignableFrom(targetType); @@ -247,7 +247,7 @@ public class PolymorphicObjectConverter(IWellKnownTypeRegistry wellKnownTypeRegi { var typeOptions = newOptions.Clone(); typeOptions.Converters.RemoveWhere(c => c.GetType() != typeof(TypeJsonConverter)); - + if (typeOptions.Converters.Any()) { var typeValue = JsonSerializer.Serialize(type, typeOptions).Trim('"'); @@ -265,6 +265,9 @@ public class PolymorphicObjectConverter(IWellKnownTypeRegistry wellKnownTypeRegi private Type? ReadType(Utf8JsonReader reader) { + if (reader.TokenType != JsonTokenType.StartObject) + return null; + reader.Read(); // Move to the first token inside the object. string? typeName = null;