diff --git a/src/Mapster.Tests/WhenMappingNullablePrimitives.cs b/src/Mapster.Tests/WhenMappingNullablePrimitives.cs
index 6e4bb32..8d0fec3 100644
--- a/src/Mapster.Tests/WhenMappingNullablePrimitives.cs
+++ b/src/Mapster.Tests/WhenMappingNullablePrimitives.cs
@@ -1,6 +1,6 @@
-using System;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
using Shouldly;
+using System;
namespace Mapster.Tests
{
@@ -134,8 +134,49 @@ public void Can_Map_From_Non_Nullable_Source_To_Nullable_Target()
poco.IsImport.GetValueOrDefault().ShouldBeTrue();
}
+ ///
+ /// https://github.com/MapsterMapper/Mapster/issues/414
+ ///
+ [TestMethod]
+ public void MappingNullTuple()
+ {
+ TypeAdapterConfig<(string?, string?, Application414), Output414>.NewConfig()
+ .Map(dest => dest, src => src.Item1)
+ .Map(dest => dest, src => src.Item2)
+ .Map(dest => dest.Application, src => src.Item3 == null ? (Application414)null : new Application414()
+ {
+ Id = src.Item3.Id,
+ Name = src.Item3.Name
+ });
+
+ (string, string, Application414) source = (null, null, null);
+
+ var result = source.Adapt();
+
+ result.Item1.ShouldBeNull();
+ result.Item2.ShouldBeNull();
+ result.Application.ShouldBeNull();
+ }
+
#region TestClasses
+
+ public class Output414
+ {
+ public string Item1 { get; set; }
+
+ public string Item2 { get; set; }
+
+ public Application414 Application { get; set; }
+ }
+
+ public class Application414
+ {
+ public string Name { get; set; }
+
+ public int Id { get; set; }
+ }
+
public class NullablePrimitivesPoco
{
public Guid Id { get; set; }
diff --git a/src/Mapster/Utils/NullableExpressionVisitor.cs b/src/Mapster/Utils/NullableExpressionVisitor.cs
index ed64299..70d2516 100644
--- a/src/Mapster/Utils/NullableExpressionVisitor.cs
+++ b/src/Mapster/Utils/NullableExpressionVisitor.cs
@@ -127,7 +127,7 @@ protected override Expression VisitConstant(ConstantExpression node)
protected override Expression VisitMember(MemberExpression node)
{
- CanBeNull = node.Member.GetCustomAttributesData().All(IsNullable);
+ CanBeNull = node.Type.IsClass || node.Member.GetCustomAttributesData().All(IsNullable);
return node;
}
}