Automapper 不会忽略后代的 属性
Automapper doesn't ignore property for descendants
首先,我使用的是 automapper 4.2.1。我有一个 class 代表树视图节点。例如这个 class 有三个属性和一个方法:
class A
{
public string Name{get; set;}
public bool IsExpanded{get; set;}
public ObservableCollection<A> Children {get; set;}
public void UpdateCurrenNode(A object)
{
Mapper.Map(object, this);
}
}
如您所见,我有一个方法可以帮助我使用给定对象更新当前节点及其后代。但我想忽略 属性 IsExanded。这是我的地图:
CreateMap<A, A>().ForMember(dest => dest.IsExpanded, opts => opts.Ignore());
但在映射后 属性 IsExpanded 仅对根对象被忽略,但对后代对象不会被忽略。我哪里错了?
谢谢!此致,德米特里
请尝试:
CreateMap<A, A>().ForMember(dest => dest.IsExpanded, opts => opts.Ignore())
.ForMember(dest => dest.Children,
opt => opt.MapFrom(src =>
src.Children.Select(Mapper.Map<A, A>).ToList()));
例如:
Class一个
public class A
{
private static MapperConfiguration config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<A, A>().ForMember(dest => dest.IsExpanded, opts => opts.Ignore())
.ForMember(dest => dest.Children,
opt => opt.MapFrom(src => src.Children.Select(Mapper.Map<A, A>).ToList()));
});
private static IMapper mapper = config.CreateMapper();
public string Name{get; set;}
public bool IsExpanded{get; set;}
public ObservableCollection<A> Children {get; set;}
public void UpdateCurrenNode(A obj)
{
mapper.Map(obj, this);
}
}
计划
var test1 = new A()
{
IsExpanded = true,
Name = "Test1",
Children = new ObservableCollection<A>()
};
var test2 = new A()
{
IsExpanded = true,
Name = "Test2",
Children = new ObservableCollection<A>()
};
var test3 = new A()
{
IsExpanded = true,
Name = "Test3",
Children = new ObservableCollection<A>()
};
var test = new A()
{
IsExpanded = true,
Name = "Test",
Children = new ObservableCollection<A>() {test1, test2, test3}
};
var clone = new A()
{
Children = new ObservableCollection<A>()
};
clone.UpdateCurrenNode(test);
产生:
更新
上面的例子也适用于您的原始配置:
cfg.CreateMap<A, A>().ForMember(dest => dest.IsExpanded, opts => opts.Ignore());
首先,我使用的是 automapper 4.2.1。我有一个 class 代表树视图节点。例如这个 class 有三个属性和一个方法:
class A
{
public string Name{get; set;}
public bool IsExpanded{get; set;}
public ObservableCollection<A> Children {get; set;}
public void UpdateCurrenNode(A object)
{
Mapper.Map(object, this);
}
}
如您所见,我有一个方法可以帮助我使用给定对象更新当前节点及其后代。但我想忽略 属性 IsExanded。这是我的地图:
CreateMap<A, A>().ForMember(dest => dest.IsExpanded, opts => opts.Ignore());
但在映射后 属性 IsExpanded 仅对根对象被忽略,但对后代对象不会被忽略。我哪里错了?
谢谢!此致,德米特里
请尝试:
CreateMap<A, A>().ForMember(dest => dest.IsExpanded, opts => opts.Ignore())
.ForMember(dest => dest.Children,
opt => opt.MapFrom(src =>
src.Children.Select(Mapper.Map<A, A>).ToList()));
例如:
Class一个
public class A
{
private static MapperConfiguration config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<A, A>().ForMember(dest => dest.IsExpanded, opts => opts.Ignore())
.ForMember(dest => dest.Children,
opt => opt.MapFrom(src => src.Children.Select(Mapper.Map<A, A>).ToList()));
});
private static IMapper mapper = config.CreateMapper();
public string Name{get; set;}
public bool IsExpanded{get; set;}
public ObservableCollection<A> Children {get; set;}
public void UpdateCurrenNode(A obj)
{
mapper.Map(obj, this);
}
}
计划
var test1 = new A()
{
IsExpanded = true,
Name = "Test1",
Children = new ObservableCollection<A>()
};
var test2 = new A()
{
IsExpanded = true,
Name = "Test2",
Children = new ObservableCollection<A>()
};
var test3 = new A()
{
IsExpanded = true,
Name = "Test3",
Children = new ObservableCollection<A>()
};
var test = new A()
{
IsExpanded = true,
Name = "Test",
Children = new ObservableCollection<A>() {test1, test2, test3}
};
var clone = new A()
{
Children = new ObservableCollection<A>()
};
clone.UpdateCurrenNode(test);
产生:
更新
上面的例子也适用于您的原始配置:
cfg.CreateMap<A, A>().ForMember(dest => dest.IsExpanded, opts => opts.Ignore());