2010-03-24 46 views
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 -cannot解決泛型列表

任何AutoMapper專家在那裏都會有幫助。

回答

1

你應該能夠溝線ValidPlaces:

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

值解析器是一個自定義類做值的分辨率,並且必須是類型IValueResolver的。這是我應該實施的一些防守性編碼。但是對於T列表 - > U列表,只要AutoMapper可以映射T - > U,它就可以工作。在你的情況下,由於T == U,那麼你不必做任何額外的事情。否則,你必須將T映射到U(但不是T的列表 - > U的列表)。

+0

我的DCObject有擴展數據,但業務對象沒有這個屬性,因此我把那個地方,否則我得到一個錯誤。另外T == U在我的情況,但我想列表翻譯爲名單 chugh97 2010-03-24 16:15:25

+0

這很好。 AutoMapper自動支持List ,無需任何額外配置。我可以這樣做: Mapper.Map >(new [] {1,2,3}); 零配置。你只需要註冊元素類型,並且由於元素類型在你的情況下是相同的,所以不需要額外的配置。 AutoMapper支持可分配類型的開箱即用。 – 2010-03-25 15:06:40