是否有某种方法可以映射没有IList<>
方法的set;
属性?
来源类:
public class SourceClass
{
private IList<string> strings;
public IList<string> Strings { get { return this.strings; } }
public SourceClass() { this.strings = new List<string>() { "s1", "s2", "s3" };
//...
}
Destionation Class:
public class DestinationClass
{
private IList<string> strings;
public IList<string> Strings { get { return this.strings; } }
public DestinationClass() { this.strings = new List<string>();
//...
}
如您所见,这两个班都没有实施set;
。结果是,当我执行AutoMapper.Mapper.Map<SourceClass, DestinationClass>(source, destination)
时,Strings
属性为空。
显而易见的解决方案是提供set;
实现DestinationClass
,但是,我想知道如何提供自定义配置以解决这些问题。
目前,我的配置是:
public class XProfile : AutoMapper.Profile
{
protected override void Configure()
{
AutoMapper.Mapper.CreateMap<SourceClass, DestinationClass>();
}
}
答案 0 :(得分:2)
您可以将AutoMapper配置为识别非公开成员。 查看documentation
答案 1 :(得分:1)
如果你正在使用不可变对象,我建议你将它作为参数传递给目标类,它将是这样的:
end
AutoMapper.Mapper.CreateMap<SourceClass, DestinationClass>()
.ConstructUsing(s => new DestinationClass(s.Strings))
:
DestinationClass
答案 2 :(得分:1)
你可以像这样创建一个构造函数。
public class DestinationClass
{
private IList<string> strings;
public IList<string> Strings { get { return this.strings; } }
public DestinationClass() : this(new List<string>()) { }
public DestinationClass(IList<string> strs) {
strings = strs.ToList(); // clone it
}
//...
}
然后,您可以使用ConstructUsing
方法进行映射,告诉AutoMapper
调用您创建的构造函数。
public class XProfile : AutoMapper.Profile
{
protected override void Configure()
{
AutoMapper.Mapper.CreateMap<SourceClass, DestinationClass>()
.ConstructUsing(x => new DestinationClass(x.Strings));
}
}