0
 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.CreateMap 工作查找何时Mapper.AssertConfigurationIsValid();调用(此行上没有抛出异常),但是当我实际调用下一行的 WCF 服务时,此处未显示 Automapper 抛出和异常说 ValidPlaces 无法映射。如果我可以正常工作将 Ignore() 放在 ValidPlaces 属性上,但理想情况下希望它通过。

任何 AutoMapper 专家都请提供帮助。

4

1 回答 1

1

您应该能够放弃 ValidPlaces 的行:

Mapper.CreateMap<BusinessObject, Proxy.DataContacts.DCObject>()
 .ForMember(x => x.ExtensionData, y => y.Ignore());

值解析器用于自定义类进行值解析,并且必须是 IValueResolver 类型。这是我应该实施的一些防御性编码。但是对于 List of T -> List of U,只要 AutoMapper 可以映射 T -> U 就可以了。在您的情况下,由于 T == U,那么您不必做任何额外的事情。否则,您必须将 T 映射到 U(但不是 T 列表 -> U 列表)。

于 2010-03-24T15:54:27.300 回答