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をマップできなかったという例外が発生します。 ValidPlacesプロパティにIgnore()を配置しますが、理想的にはそれを渡します。

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 に答える