diff --git a/src/Mapster/Adapters/BaseClassAdapter.cs b/src/Mapster/Adapters/BaseClassAdapter.cs index 7fd04fd3..d134330c 100644 --- a/src/Mapster/Adapters/BaseClassAdapter.cs +++ b/src/Mapster/Adapters/BaseClassAdapter.cs @@ -227,7 +227,8 @@ protected Expression CreateInstantiationExpression(Expression source, ClassMappi else { - if (member.Getter.CanBeNull() && member.Ignore.Condition == null) + if (member.Getter.CanBeNull() && member.DestinationMember.Type.IsAbstractOrNotPublicCtor() + && member.Ignore.Condition == null) { var compareNull = Expression.Equal(member.Getter, Expression.Constant(null, member.Getter.Type)); getter = Expression.Condition(ExpressionEx.Not(compareNull), diff --git a/src/Mapster/Utils/ReflectionUtils.cs b/src/Mapster/Utils/ReflectionUtils.cs index 93aa7e62..5060eb2f 100644 --- a/src/Mapster/Utils/ReflectionUtils.cs +++ b/src/Mapster/Utils/ReflectionUtils.cs @@ -429,5 +429,16 @@ public static bool IsOpenGenericType(this Type type) return false; } + + public static bool IsAbstractOrNotPublicCtor(this Type type) + { + if(type.IsAbstract) + return true; + + if (type.GetConstructors().All(x => !x.IsPublic)) + return true; + + return false; + } } } \ No newline at end of file