Mapper.CreateMap<BusinessObject, Proxy.DataContacts.DCObject>()
.ForMember(x => x.ExtensionData, y => y.Ignore())
.ForMember(z => z.ValidPlaces, a=> a.ResolveUsing(typeof(ValidPlaces)));
Mapper.AssertConfigurationIsValid();
proxydcObject = Mapper.Map<BusinessObject, Proxy.DataContracts.DCObject>(_instanceOfBusinessObject); //throws an exception saying ValidPlaces could not be resolved
public class BusinessObject
{
public Enum1 Enum1 { get; set; }
public List<ValidPlaces> ValidPlaces{ get; set; }
}
public class ValidPlaces
{
public int No { get; set; }
public string Name { get; set; }
}
public class DCObject
{
[DataMember]
public Enum1 Enum1 { get; set; }
[DataMember]
public List<ValidPlaces> ValidPlaces{ get; set; }
}
当调用Mapper.AssertConfigurationIsValid();
(此行没有抛出异常)时,Mapper.CreateMap可以查找但是
当我实际调用下一行的WCF服务时,这里没有显示Automapper抛出异常,说无法映射ValidPlaces。如果我把Ignore()放在ValidPlaces属性上但理想情况下希望传递它,那就好了。
任何AutoMapper专家都会帮忙。
答案 0 :(得分:1)
你应该能够抛弃ValidPlaces的行:
Mapper.CreateMap<BusinessObject, Proxy.DataContacts.DCObject>()
.ForMember(x => x.ExtensionData, y => y.Ignore());
值解析器用于自定义类来执行值解析,并且必须是IValueResolver类型。这是我应该采取的一些防御性编码。但对于T的列表 - > U的列表,只要AutoMapper可以映射T - &gt;你会工作的。在你的情况下,因为T == U,那么你不需要做任何额外的事情。否则,您必须将T映射到U(但不是T的列表 - &gt; U的列表)。