diff --git a/src/modules/Elsa.Workflows.Management/Activities/WorkflowDefinitionActivity/WorkflowDefinitionActivity.cs b/src/modules/Elsa.Workflows.Management/Activities/WorkflowDefinitionActivity/WorkflowDefinitionActivity.cs
index cfd6f0bbe..e0a394dea 100644
--- a/src/modules/Elsa.Workflows.Management/Activities/WorkflowDefinitionActivity/WorkflowDefinitionActivity.cs
+++ b/src/modules/Elsa.Workflows.Management/Activities/WorkflowDefinitionActivity/WorkflowDefinitionActivity.cs
@@ -23,7 +23,7 @@ public class WorkflowDefinitionActivity : Composite, IInitializable
public string WorkflowDefinitionId { get; set; } = default!;
///
- /// the latest published version number set by the provider. This is used by tooling to let the user know that a newer version is available.
+ /// The latest published version number set by the provider. This is used by tooling to let the user know that a newer version is available.
///
public int LatestAvailablePublishedVersion { get; set; }
diff --git a/src/modules/Elsa.Workflows.Management/Serialization/Converters/ActivityJsonConverter.cs b/src/modules/Elsa.Workflows.Management/Serialization/Converters/ActivityJsonConverter.cs
index b44039d7a..fdde39057 100644
--- a/src/modules/Elsa.Workflows.Management/Serialization/Converters/ActivityJsonConverter.cs
+++ b/src/modules/Elsa.Workflows.Management/Serialization/Converters/ActivityJsonConverter.cs
@@ -44,6 +44,7 @@ public class ActivityJsonConverter : JsonConverter
var activityTypeName = GetActivityDetails(activityRoot, out var activityTypeVersion, out var activityDescriptor);
var notFoundActivityTypeName = ActivityTypeNameHelper.GenerateTypeName();
+ // If the activity type is a NotFoundActivity, try to extract the original activity type name and version.
if(activityTypeName.Equals(notFoundActivityTypeName) && activityRoot.TryGetProperty("originalActivityJson", out var originalActivityJson))
{
activityRoot = JsonDocument.Parse(originalActivityJson.GetString()!).RootElement;
@@ -54,6 +55,7 @@ public class ActivityJsonConverter : JsonConverter
newOptions.Converters.Add(new InputJsonConverterFactory(_serviceProvider));
newOptions.Converters.Add(new OutputJsonConverterFactory(_serviceProvider));
+ // If the activity type is not found, create a NotFoundActivity instead.
if (activityDescriptor == null)
{
var notFoundContext = new ActivityConstructorContext(activityRoot, newOptions);
@@ -221,10 +223,17 @@ public class ActivityJsonConverter : JsonConverter
throw new JsonException("Failed to extract activity type property");
var activityTypeName = activityTypeNameElement.GetString()!;
-
- activityTypeVersion = activityRoot.TryGetProperty("version", out var activityVersionElement) ? activityVersionElement.GetInt32() : 1;
- activityDescriptor = _activityRegistry.Find(activityTypeName, activityTypeVersion);
- activityDescriptor ??= _activityRegistry.Find(activityTypeName);
+
+ if (activityRoot.TryGetProperty("version", out var activityVersionElement))
+ {
+ activityTypeVersion = activityVersionElement.GetInt32();
+ activityDescriptor = _activityRegistry.Find(activityTypeName, activityTypeVersion);
+ }
+ else
+ {
+ activityDescriptor = _activityRegistry.Find(activityTypeName);
+ activityTypeVersion = activityDescriptor?.Version ?? 0;
+ }
return activityTypeName;
}
diff --git a/src/modules/Elsa.Workflows.Management/Serialization/SerializationOptionsConfigurator.cs b/src/modules/Elsa.Workflows.Management/Serialization/SerializationOptionsConfigurator.cs
index f038bfe3c..70ab26f1c 100644
--- a/src/modules/Elsa.Workflows.Management/Serialization/SerializationOptionsConfigurator.cs
+++ b/src/modules/Elsa.Workflows.Management/Serialization/SerializationOptionsConfigurator.cs
@@ -5,15 +5,22 @@ using Microsoft.Extensions.DependencyInjection;
namespace Elsa.Workflows.Management.Serialization;
+///
+/// Configures the JSON serialization options with support for serializing and deserializing activities and expressions.
+///
public class SerializationOptionsConfigurator : ISerializationOptionsConfigurator
{
private readonly IServiceProvider _serviceProvider;
+ ///
+ /// Initializes a new instance of the class.
+ ///
public SerializationOptionsConfigurator(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
+ ///
public void Configure(JsonSerializerOptions options)
{
options.Converters.Add(Create());