mirror of https://github.com/abpframework/abp.git
3 changed files with 51 additions and 32 deletions
@ -0,0 +1,35 @@ |
|||||
|
using System; |
||||
|
using System.Linq; |
||||
|
using System.Reflection; |
||||
|
using MongoDB.Bson.Serialization; |
||||
|
using MongoDB.Bson.Serialization.Serializers; |
||||
|
using Volo.Abp.Timing; |
||||
|
|
||||
|
namespace Volo.Abp.MongoDB.Serializer; |
||||
|
|
||||
|
// MongoDB uses static properties to store the mapping information,
|
||||
|
// We must reconfigure it in the new unit test.
|
||||
|
public static class UnitTestSerializerHelper |
||||
|
{ |
||||
|
public static void FixSerializers(DateTimeKind? kind) |
||||
|
{ |
||||
|
foreach (var registeredClassMap in BsonClassMap.GetRegisteredClassMaps()) |
||||
|
{ |
||||
|
foreach (var declaredMemberMap in registeredClassMap.DeclaredMemberMaps.Where(x => x.MemberType == typeof(DateTime) || x.MemberType == typeof(DateTime?))) |
||||
|
{ |
||||
|
IBsonSerializer serializer = null; |
||||
|
if (kind != null) |
||||
|
{ |
||||
|
serializer = !declaredMemberMap.MemberInfo.IsDefined(typeof(DisableDateTimeNormalizationAttribute), true) |
||||
|
? declaredMemberMap.MemberType == typeof(DateTime?) ? new NullableSerializer<DateTime>().WithSerializer(new AbpMongoDbDateTimeSerializer(kind.Value, false)) |
||||
|
: new AbpMongoDbDateTimeSerializer(kind.Value, false) |
||||
|
: declaredMemberMap.MemberType == typeof(DateTime?) ? new NullableSerializer<DateTime>().WithSerializer(new DateTimeSerializer(DateTimeKind.Unspecified)) |
||||
|
: new DateTimeSerializer(DateTimeKind.Unspecified); |
||||
|
} |
||||
|
|
||||
|
var fieldInfo = declaredMemberMap.GetType().GetField("_serializer", BindingFlags.NonPublic | BindingFlags.Instance); |
||||
|
fieldInfo?.SetValue(declaredMemberMap, serializer); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue