Fix Type serialization for MongoDB provider

This commit is contained in:
Sipke Schoorstra 2021-07-13 13:11:32 +02:00
parent cbfb21c4c9
commit abc4e5389c
2 changed files with 29 additions and 0 deletions

View file

@ -0,0 +1,28 @@
using System;
using Elsa.Models;
using MongoDB.Bson.Serialization;
using Rebus.Extensions;
namespace Elsa.Persistence.MongoDb.Serializers
{
public class TypeSerializer : IBsonSerializer<Type>
{
public static TypeSerializer Instance { get; } = new();
public Type ValueType => typeof(Variables);
public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value) => Serialize(context, args, (Type) value);
public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, Type value)
{
var typeName = value.GetSimpleAssemblyQualifiedName();
context.Writer.WriteString(typeName);
}
object IBsonSerializer.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args) => Deserialize(context, args);
public Type Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
var typeName = context.Reader.ReadString();
return typeName is not null and not "" ? Type.GetType(typeName)! : default!;
}
}
}

View file

@ -63,6 +63,7 @@ namespace Elsa.Persistence.MongoDb.Services
BsonSerializer.RegisterSerializer(VariablesSerializer.Instance);
BsonSerializer.RegisterSerializer(JObjectSerializer.Instance);
BsonSerializer.RegisterSerializer(ObjectSerializer.Instance);
BsonSerializer.RegisterSerializer(TypeSerializer.Instance);
BsonSerializer.RegisterSerializer(new InstantSerializer());
}
}