From c5f35c81fc8e42bcda3ee55c7e9860e5b7c7efeb Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Thu, 9 Mar 2023 11:02:07 +0100 Subject: [PATCH] Fix variable with generic type serialization --- .../Converters/VariableConverterFactory.cs | 30 +++++++++++++++++++ .../CustomSerializationOptionConfigurator.cs | 9 ++++-- 2 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 src/modules/Elsa.Workflows.Core/Serialization/Converters/VariableConverterFactory.cs diff --git a/src/modules/Elsa.Workflows.Core/Serialization/Converters/VariableConverterFactory.cs b/src/modules/Elsa.Workflows.Core/Serialization/Converters/VariableConverterFactory.cs new file mode 100644 index 000000000..9c66d48f7 --- /dev/null +++ b/src/modules/Elsa.Workflows.Core/Serialization/Converters/VariableConverterFactory.cs @@ -0,0 +1,30 @@ +using System.Text.Json; +using System.Text.Json.Serialization; +using Elsa.Expressions.Contracts; +using Elsa.Workflows.Core.Models; +using Microsoft.Extensions.Logging; + +namespace Elsa.Workflows.Core.Serialization.Converters; + +/// +/// Produces instances for and . +/// +public class VariableConverterFactory : JsonConverterFactory +{ + private readonly IWellKnownTypeRegistry _wellKnownTypeRegistry; + private readonly ILogger _logger; + + /// + // ReSharper disable once ContextualLoggerProblem + public VariableConverterFactory(IWellKnownTypeRegistry wellKnownTypeRegistry, ILogger logger) + { + _wellKnownTypeRegistry = wellKnownTypeRegistry; + _logger = logger; + } + + /// + public override bool CanConvert(Type typeToConvert) => typeof(Variable).IsAssignableFrom(typeToConvert); + + /// + public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) => new VariableConverter(_wellKnownTypeRegistry, _logger); +} \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Core/Serialization/CustomSerializationOptionConfigurator.cs b/src/modules/Elsa.Workflows.Core/Serialization/CustomSerializationOptionConfigurator.cs index e8bf8705f..e098c88a2 100644 --- a/src/modules/Elsa.Workflows.Core/Serialization/CustomSerializationOptionConfigurator.cs +++ b/src/modules/Elsa.Workflows.Core/Serialization/CustomSerializationOptionConfigurator.cs @@ -2,7 +2,6 @@ using System.Text.Json; using System.Text.Json.Serialization; using Elsa.Workflows.Core.Contracts; using Elsa.Workflows.Core.Serialization.Converters; -using Elsa.Workflows.Core.Services; using Microsoft.Extensions.DependencyInjection; namespace Elsa.Workflows.Core.Serialization; @@ -14,14 +13,18 @@ public class CustomSerializationOptionConfigurator : ISerializationOptionsConfig { private readonly IServiceProvider _serviceProvider; + /// + /// Initializes a new instance of the class. + /// public CustomSerializationOptionConfigurator(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; } - + + /// public void Configure(JsonSerializerOptions options) { - options.Converters.Add(Create()); + options.Converters.Add(Create()); } private T Create() => ActivatorUtilities.CreateInstance(_serviceProvider);