diff --git a/src/Mapster/Adapters/BaseClassAdapter.cs b/src/Mapster/Adapters/BaseClassAdapter.cs index faa490ec..2706bb55 100644 --- a/src/Mapster/Adapters/BaseClassAdapter.cs +++ b/src/Mapster/Adapters/BaseClassAdapter.cs @@ -54,6 +54,15 @@ select fn(src, destinationMember, arg)) Destination = (ParameterExpression?)destination, UseDestinationValue = arg.MapType != MapType.Projection && destinationMember.UseDestinationValue(arg), }; + if (arg.MapType == MapType.MapToTarget && getter == null && arg.DestinationType.IsRecordType()) + { + var find = arg.DestinationType.GetFieldsAndProperties(arg.Settings.EnableNonPublicMembers.GetValueOrDefault()).ToArray() + .Where(x => x.Name == destinationMember.Name).FirstOrDefault(); + + if (find != null) + getter = Expression.MakeMemberAccess(destination, (MemberInfo)find.Info); + + } if (getter != null) { propertyModel.Getter = arg.MapType == MapType.Projection diff --git a/src/Mapster/Adapters/RecordTypeAdapter.cs b/src/Mapster/Adapters/RecordTypeAdapter.cs index 009af932..12617786 100644 --- a/src/Mapster/Adapters/RecordTypeAdapter.cs +++ b/src/Mapster/Adapters/RecordTypeAdapter.cs @@ -33,7 +33,7 @@ protected override Expression CreateInstantiationExpression(Expression source, E var classModel = GetConstructorModel(ctor, false); var classConverter = CreateClassConverter(source, classModel, arg); var installExpr = CreateInstantiationExpression(source, classConverter, arg); - return RecordInlineExpression(source, arg, installExpr); // Activator field when not include in public ctor + return RecordInlineExpression(source, destination, arg, installExpr); // Activator field when not include in public ctor } protected override Expression CreateBlockExpression(Expression source, Expression destination, CompileArgument arg) @@ -46,7 +46,7 @@ protected override Expression CreateInlineExpression(Expression source, CompileA return base.CreateInstantiationExpression(source, arg); } - private Expression? RecordInlineExpression(Expression source, CompileArgument arg, Expression installExpr) + private Expression? RecordInlineExpression(Expression source, Expression? destination, CompileArgument arg, Expression installExpr) { //new TDestination { // Prop1 = convert(src.Prop1), @@ -58,7 +58,7 @@ protected override Expression CreateInlineExpression(Expression source, CompileA var newInstance = memberInit?.NewExpression ?? (NewExpression)exp; var contructorMembers = newInstance.Arguments.OfType().Select(me => me.Member).ToArray(); var classModel = GetSetterModel(arg); - var classConverter = CreateClassConverter(source, classModel, arg); + var classConverter = CreateClassConverter(source, classModel, arg, destination:destination); var members = classConverter.Members; var lines = new List();