Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions src/Mapster.Tests/WhenIgnoreMapping.cs
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,78 @@ public void MappingToIntefaceWithIgnorePrivateSetProperty()

}

/// <summary>
/// https://github.com/MapsterMapper/Mapster/issues/953
/// </summary>
[TestMethod]
public void RemoveIgnoredFeatureIsWorked()
{
TypeAdapterConfig<BaseDTO953, BasePoco953>
.NewConfig()
.Map(dest => dest.PocoName, src => src.DtoName)
.Ignore(x=>x.PocoName);

TypeAdapterConfig<DerivedDTO953, DerivedPoco953>
.NewConfig()
.Inherits<BaseDTO953, BasePoco953>();

var srcDerived = new DerivedPoco953 { PocoName = "Alice" };

// standart cases
var resultDerived = srcDerived.Adapt<DerivedPoco953>();

// when igrored member is remove

var resultDerivedRemoveAllIgnored = srcDerived
.Adapt<DerivedPoco953>(cfg =>
{
cfg
.NewConfig<DerivedDTO953, DerivedPoco953>()
.Inherits<BaseDTO953, BasePoco953>()
.IgnoredClear();
});

var resultDerivedRemove = srcDerived
.Adapt<DerivedPoco953>(cfg =>
{
cfg
.NewConfig<DerivedDTO953, DerivedPoco953>()
.Inherits<BaseDTO953, BasePoco953>()
.IgnoredRemove(x=>x.PocoName);
});

var resultDerivedRemoveByName = srcDerived
.Adapt<DerivedPoco953>(cfg =>
{
cfg
.NewConfig<DerivedDTO953, DerivedPoco953>()
.Inherits<BaseDTO953, BasePoco953>()
.IgnoredRemove("PocoName");
});


resultDerived.PocoName.ShouldNotBeNullOrEmpty();
resultDerivedRemoveAllIgnored.PocoName.ShouldBe("Alice");
resultDerivedRemove.PocoName.ShouldBe("Alice");
resultDerivedRemoveByName.PocoName.ShouldBe("Alice");

}

#region TestClasses

public class BaseDTO953
{
public string DtoName { get; set; }
}
public class DerivedDTO953: BaseDTO953 { }

public class BasePoco953
{
public string PocoName { get; set; }
}

public class DerivedPoco953 : BasePoco953 { }

public interface InterfaceDestination723
{
public string Inter { get; set; }
Expand Down
29 changes: 29 additions & 0 deletions src/Mapster/TypeAdapterSetter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,25 @@ public static TSetter IgnoreAttribute<TSetter>(this TSetter setter, params Type[
return setter;
}

public static TSetter IgnoredClear<TSetter>(this TSetter setter) where TSetter : TypeAdapterSetter
{
setter.CheckCompiled();
setter.Settings.Ignore.Clear();

return setter;
}

public static TSetter IgnoredRemove<TSetter>(this TSetter setter, params string[] names) where TSetter : TypeAdapterSetter
{
setter.CheckCompiled();

foreach (var name in names)
{
setter.Settings.Ignore.TryRemove(name, out _);
}
return setter;
}

public static TSetter IncludeAttribute<TSetter>(this TSetter setter, params Type[] types) where TSetter : TypeAdapterSetter
{
setter.CheckCompiled();
Expand Down Expand Up @@ -554,6 +573,16 @@ internal TypeAdapterSetter(TypeAdapterSettings settings, TypeAdapterConfig paren
return (TypeAdapterSetter<TSource, TDestination>)base.Ignore(members);
}

public TypeAdapterSetter<TDestination> IgnoredRemove(params Expression<Func<TDestination, object>>[] members)
{
this.CheckCompiled();

foreach (var member in members)
{
Settings.Ignore.TryRemove(member.GetMemberPath()!, out _);
}
return this;
}
public new TypeAdapterSetter<TSource, TDestination> Map<TDestinationMember, TSourceMember>(
Expression<Func<TDestination, TDestinationMember>> member,
Expression<Func<TSourceMember>> source)
Expand Down
Loading