自动映射 - 无法解析通用列表

时间:2010-03-24 12:11:30

标签: c# automapper codeplex

 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专家都会帮忙。

1 个答案:

答案 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的列表)。