Fix Variables serialization for MongoDB provider

This commit is contained in:
Sipke Schoorstra 2021-05-27 23:14:26 +02:00
parent f263614e01
commit da8d12b9e4
3 changed files with 56 additions and 3 deletions

View file

@ -0,0 +1,2 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=extensions/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

View file

@ -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<Variables>
{
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<Variables>(text, _serializerSettings)!;
}
}
}

View file

@ -32,9 +32,19 @@ namespace Elsa.Persistence.MongoDb.Services
cm.SetIsRootClass(true);
cm.MapIdProperty(x => x.Id);
});
BsonClassMap.RegisterClassMap<WorkflowDefinition>(cm => cm.AutoMap());
BsonClassMap.RegisterClassMap<WorkflowInstance>(cm => cm.AutoMap());
BsonClassMap.RegisterClassMap<WorkflowDefinition>(cm =>
{
cm.MapProperty(p => p.Variables).SetSerializer(VariablesSerializer.Instance);
cm.AutoMap();
});
BsonClassMap.RegisterClassMap<WorkflowInstance>(cm =>
{
cm.MapProperty(p => p.Variables).SetSerializer(VariablesSerializer.Instance);
cm.AutoMap();
});
BsonClassMap.RegisterClassMap<Bookmark>(cm => cm.AutoMap());
BsonClassMap.RegisterClassMap<WorkflowExecutionLogRecord>(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());