Fix Variables serialization for MongoDB provider
This commit is contained in:
parent
f263614e01
commit
da8d12b9e4
|
|
@ -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>
|
||||
|
|
@ -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)!;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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());
|
||||
|
|
|
|||
Loading…
Reference in a new issue