From 3ead724a509abce082a0d56186784564d7cac6a2 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 5 Sep 2025 11:50:10 +0800 Subject: [PATCH 1/2] Add AbpBsonSerializer utility class --- .../Volo/Abp/MongoDB/AbpBsonSerializer.cs | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpBsonSerializer.cs diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpBsonSerializer.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpBsonSerializer.cs new file mode 100644 index 0000000000..59b24e6063 --- /dev/null +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpBsonSerializer.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Concurrent; + +using System.Reflection; +using MongoDB.Bson.Serialization; + +namespace Volo.Abp.MongoDB; + +public static class AbpBsonSerializer +{ + private static readonly ConcurrentDictionary Cache; + + static AbpBsonSerializer() + { + var registry = BsonSerializer.SerializerRegistry; + var type = typeof(BsonSerializerRegistry); + var cacheField = type.GetField("_cache", BindingFlags.NonPublic | BindingFlags.Instance) ?? + throw new AbpException($"Cannot find _cache field of {type.FullName}."); + Cache = (ConcurrentDictionary)cacheField.GetValue(registry)!; + } + + public static void RemoveSerializer() + { + Cache.TryRemove(typeof(T), out _); + } + + public static ConcurrentDictionary GetSerializerCache() + { + return Cache; + } +} From f22df7dbb9621e4198ea899034747dd2315b901f Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 5 Sep 2025 13:03:37 +0800 Subject: [PATCH 2/2] Update Guid serializer registration in AbpMongoDbModule --- .../src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs index 195491d989..fb9d6eaea1 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs @@ -19,7 +19,8 @@ public class AbpMongoDbModule : AbpModule { static AbpMongoDbModule() { - BsonSerializer.TryRegisterSerializer(new GuidSerializer(GuidRepresentation.Standard)); + AbpBsonSerializer.RemoveSerializer(); + BsonSerializer.RegisterSerializer(new GuidSerializer(GuidRepresentation.Standard)); BsonTypeMapper.RegisterCustomTypeMapper(typeof(Guid), new AbpGuidCustomBsonTypeMapper()); }