Open Source Web Application Framework for ASP.NET Core
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

35 lines
1.7 KiB

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);
}
}
}
}