Skip to content

Commit

Permalink
Fix Type serialization for MongoDB provider
Browse files Browse the repository at this point in the history
  • Loading branch information
sfmskywalker committed Jul 13, 2021
1 parent cbfb21c commit abc4e53
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -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!;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ private static void RegisterSerializers()
BsonSerializer.RegisterSerializer(VariablesSerializer.Instance);
BsonSerializer.RegisterSerializer(JObjectSerializer.Instance);
BsonSerializer.RegisterSerializer(ObjectSerializer.Instance);
BsonSerializer.RegisterSerializer(TypeSerializer.Instance);
BsonSerializer.RegisterSerializer(new InstantSerializer());
}
}
Expand Down

0 comments on commit abc4e53

Please sign in to comment.