diff --git a/src/modules/Elsa.Workflows.Core/Activities/Flowchart/Serialization/FlowchartJsonConverter.cs b/src/modules/Elsa.Workflows.Core/Activities/Flowchart/Serialization/FlowchartJsonConverter.cs index 96a1fae43..5e3d0e618 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/Flowchart/Serialization/FlowchartJsonConverter.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/Flowchart/Serialization/FlowchartJsonConverter.cs @@ -10,10 +10,17 @@ namespace Elsa.Workflows.Core.Activities.Flowchart.Serialization; /// public class FlowchartJsonConverter : JsonConverter { + private readonly IIdentityGenerator _identityGenerator; private const string AllActivitiesKey = "AllActivities"; private const string AllConnectionsKey = "AllConnections"; private const string NotFoundConnectionsKey = "NotFoundConnectionsKey"; + /// + public FlowchartJsonConverter(IIdentityGenerator identityGenerator) + { + _identityGenerator = identityGenerator; + } + /// public override Activities.Flowchart Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { @@ -22,7 +29,7 @@ public class FlowchartJsonConverter : JsonConverter var connectionsElement = doc.RootElement.TryGetProperty("connections", out var connectionsEl) ? connectionsEl : default; var activitiesElement = doc.RootElement.TryGetProperty("activities", out var activitiesEl) ? activitiesEl : default; - var id = doc.RootElement.GetProperty("id").GetString()!; + var id = doc.RootElement.TryGetProperty("id", out var idAttribute) ? idAttribute.GetString() : _identityGenerator.GenerateId(); var startId = doc.RootElement.TryGetProperty("start", out var startElement) ? startElement.GetString() : default; var activities = activitiesElement.ValueKind != JsonValueKind.Undefined ? activitiesElement.Deserialize>(options) ?? new List() : new List(); var metadataElement = doc.RootElement.TryGetProperty("metadata", out var metadataEl) ? metadataEl : default;