diff --git a/src/modules/Elsa.MongoDb/Features/MongoDbFeature.cs b/src/modules/Elsa.MongoDb/Features/MongoDbFeature.cs index d2a0349b5..29341fda5 100644 --- a/src/modules/Elsa.MongoDb/Features/MongoDbFeature.cs +++ b/src/modules/Elsa.MongoDb/Features/MongoDbFeature.cs @@ -1,3 +1,4 @@ +using System.Text.Json; using Elsa.Features.Abstractions; using Elsa.Features.Services; using Elsa.MongoDb.Options; @@ -51,6 +52,7 @@ public class MongoDbFeature : FeatureBase BsonSerializer.RegisterSerializer(typeof(Type), new TypeSerializer()); BsonSerializer.RegisterSerializer(typeof(Variable), new VariableSerializer()); BsonSerializer.RegisterSerializer(typeof(Version), new VersionSerializer()); + BsonSerializer.RegisterSerializer(typeof(JsonElement), new JsonElementSerializer()); } private static void RegisterClassMaps() diff --git a/src/modules/Elsa.MongoDb/Serializers/JsonElementSerializer.cs b/src/modules/Elsa.MongoDb/Serializers/JsonElementSerializer.cs new file mode 100644 index 000000000..b67efdba0 --- /dev/null +++ b/src/modules/Elsa.MongoDb/Serializers/JsonElementSerializer.cs @@ -0,0 +1,36 @@ +using System.Text.Json; +using MongoDB.Bson; +using MongoDB.Bson.Serialization; + +namespace Elsa.MongoDb.Serializers; + +/// +/// Serializes a . +/// +public class JsonElementSerializer : IBsonSerializer +{ + /// + public Type ValueType => typeof(JsonElement); + + void IBsonSerializer.Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value) => Serialize(context, args, (JsonElement)value); + object IBsonSerializer.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args) => Deserialize(context, args); + + /// + public JsonElement Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args) + { + if (context.Reader.CurrentBsonType == BsonType.Null) + { + context.Reader.ReadNull(); + return new JsonElement(); + } + + var json = context.Reader.ReadString(); + return JsonSerializer.Deserialize(json); + } + + /// + public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, JsonElement value) + { + context.Writer.WriteString(value.GetRawText()); + } +} \ No newline at end of file