diff --git a/src/persistence/Elsa.Persistence.MongoDb/Elsa.Persistence.MongoDb.csproj.DotSettings b/src/persistence/Elsa.Persistence.MongoDb/Elsa.Persistence.MongoDb.csproj.DotSettings
new file mode 100644
index 000000000..17962b139
--- /dev/null
+++ b/src/persistence/Elsa.Persistence.MongoDb/Elsa.Persistence.MongoDb.csproj.DotSettings
@@ -0,0 +1,2 @@
+
+ True
\ No newline at end of file
diff --git a/src/persistence/Elsa.Persistence.MongoDb/Serializers/VariablesSerializer.cs b/src/persistence/Elsa.Persistence.MongoDb/Serializers/VariablesSerializer.cs
new file mode 100644
index 000000000..51f290fe1
--- /dev/null
+++ b/src/persistence/Elsa.Persistence.MongoDb/Serializers/VariablesSerializer.cs
@@ -0,0 +1,40 @@
+using System;
+using Elsa.Models;
+using MongoDB.Bson.Serialization;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using NodaTime;
+using NodaTime.Serialization.JsonNet;
+
+namespace Elsa.Persistence.MongoDb.Serializers
+{
+ public class VariablesSerializer : IBsonSerializer
+ {
+ public static VariablesSerializer Instance { get; } = new();
+
+ private readonly JsonSerializerSettings _serializerSettings = new JsonSerializerSettings
+ {
+ NullValueHandling = NullValueHandling.Ignore,
+ TypeNameAssemblyFormatHandling = TypeNameAssemblyFormatHandling.Simple,
+ TypeNameHandling = TypeNameHandling.Auto,
+ }.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
+
+ public Type ValueType => typeof(Variables);
+
+ public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value) => Serialize(context, args, (Variables) value);
+
+ public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, Variables value)
+ {
+ var json = JsonConvert.SerializeObject(value, _serializerSettings);
+ context.Writer.WriteString(json);
+ }
+
+ object IBsonSerializer.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args) => Deserialize(context, args);
+
+ public Variables Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
+ {
+ var text = context.Reader.ReadString();
+ return JsonConvert.DeserializeObject(text, _serializerSettings)!;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/persistence/Elsa.Persistence.MongoDb/Services/DatabaseRegister.cs b/src/persistence/Elsa.Persistence.MongoDb/Services/DatabaseRegister.cs
index fe2a0ab1e..2e9d3a8e4 100644
--- a/src/persistence/Elsa.Persistence.MongoDb/Services/DatabaseRegister.cs
+++ b/src/persistence/Elsa.Persistence.MongoDb/Services/DatabaseRegister.cs
@@ -32,9 +32,19 @@ namespace Elsa.Persistence.MongoDb.Services
cm.SetIsRootClass(true);
cm.MapIdProperty(x => x.Id);
});
-
- BsonClassMap.RegisterClassMap(cm => cm.AutoMap());
- BsonClassMap.RegisterClassMap(cm => cm.AutoMap());
+
+ BsonClassMap.RegisterClassMap(cm =>
+ {
+ cm.MapProperty(p => p.Variables).SetSerializer(VariablesSerializer.Instance);
+ cm.AutoMap();
+ });
+
+ BsonClassMap.RegisterClassMap(cm =>
+ {
+ cm.MapProperty(p => p.Variables).SetSerializer(VariablesSerializer.Instance);
+ cm.AutoMap();
+ });
+
BsonClassMap.RegisterClassMap(cm => cm.AutoMap());
BsonClassMap.RegisterClassMap(cm => cm.AutoMap());
}
@@ -48,6 +58,7 @@ namespace Elsa.Persistence.MongoDb.Services
private static void RegisterSerializers()
{
+ BsonSerializer.RegisterSerializer(VariablesSerializer.Instance);
BsonSerializer.RegisterSerializer(JObjectSerializer.Instance);
BsonSerializer.RegisterSerializer(ObjectSerializer.Instance);
BsonSerializer.RegisterSerializer(new InstantSerializer());