diff --git a/src/Mapster.Tests/WhenIgnoringNonMapped.cs b/src/Mapster.Tests/WhenIgnoringNonMapped.cs index 59a082c..320feff 100644 --- a/src/Mapster.Tests/WhenIgnoringNonMapped.cs +++ b/src/Mapster.Tests/WhenIgnoringNonMapped.cs @@ -12,6 +12,7 @@ public void Should_Ignore_Non_Mapped() { TypeAdapterConfig.NewConfig() .Map(dest => dest.Id, src => src.Id) + .RequireDestinationMemberSource(true) .IgnoreNonMapped(true) .Compile(); diff --git a/src/Mapster/Adapters/BaseClassAdapter.cs b/src/Mapster/Adapters/BaseClassAdapter.cs index faa490e..0d0b2f2 100644 --- a/src/Mapster/Adapters/BaseClassAdapter.cs +++ b/src/Mapster/Adapters/BaseClassAdapter.cs @@ -21,6 +21,9 @@ protected ClassMapping CreateClassConverter(Expression source, ClassModel classM var unmappedDestinationMembers = new List(); var properties = new List(); + if (arg.Settings.IgnoreNonMapped == true) + IgnoreNonMapped(classModel,arg); + var sources = new List {source}; sources.AddRange( arg.Settings.ExtraSources.Select(src => @@ -181,6 +184,18 @@ protected virtual ClassModel GetSetterModel(CompileArgument arg) }; } + protected void IgnoreNonMapped (ClassModel classModel, CompileArgument arg) + { + var notMappingToIgnore = classModel.Members + .ExceptBy(arg.Settings.Resolvers.Select(x => x.DestinationMemberName), + y => y.Name); + + foreach (var item in notMappingToIgnore) + { + arg.Settings.Ignore.TryAdd(item.Name, new IgnoreDictionary.IgnoreItem()); + } + } + #endregion } }