2013-02-04 167 views
1

我有兩個具有確切屬性的對象(類)。說:映射兩個相同的對象

class class1 
{ 
    public string prop1{get;set;} 
    public string prop2{get;set;} 
} 

class class2 
{ 
    public string prop1{get;set;} 
    public string prop2{get;set;} 
} 

我想使用反射這些類映射,我已經使用AutoMapper,它不適合我的情況下工作,因爲我有內部目標對象....

當使用反射我需要通過屬性名,我不希望這樣做一一有其他的方式:

PropertyInfo propinfo = listToReturn.GetType().GetProperty(nameofproperty); 

編輯::

這是我曾嘗試與automapper:

internal static DTO_objectclass ConvertFOS(objectclass q) 
     { 
      DTO_objectclass resultsToReturn = new DTO_objectclass(); 

      AutoMapper.Mapper.CreateMap<objectclass , DTO_objectclass >(); 

      resultsToReturn = AutoMapper.Mapper.Map<objectclass , DTO_objectclass>(q); 

      return resultsToReturn; 
     } 

這個工程直到它在那裏我有對象類是這樣一個特性:

property class3 parentClass{get; set;} 

和DTO_objectclass我得到:

property guid parentClass{get; set;} 

從哪裏獲得的轉換失敗例外..

Trying to map System.Guid to parentclient.\nUsing mapping configuration for DTO_objectclass to objectclass \nDestination property: ParentClass\nException of type 'AutoMapper.AutoMapperMappingException' was thrown. 
+4

你爲什麼要這樣做,那是浪費代碼。 –

+0

不這樣做,它是過早的優化,使用反射會降低你的性能 –

+1

爲什麼不發佈你的Automapper問題,所以有人可以幫助,而不是試圖重塑它已經做了什麼? –

回答

1

該例外解釋了該問題。 AutoMapper無法將GUID轉換爲ParentClass。如果沒有更好的信息,AutoMapper將假定兩個具有相同名稱的屬性/字段將是相同類型的。

爲了克服這個問題,你需要編寫一個轉換方法。如果該方法被稱爲ConvertGuidToParentClassInstance,例如,你可以接着寫這樣的映射:

Mapper.CreateMap<DTO_objectcass, objectclass>() 
    .ForMember(dest => dest.parentClass) 
    .MapFrom(src => ConvertGuidToParentClassInstance(src.parentClass)); 

有了這樣的映射,AutoMapper可以處理這種情況。

+0

嗨如果我有父類的兩個屬性?將在同一個創建圖 – Zaki

+0

謝謝,這個工程,並找到了如何做兩個特性 – Zaki

+0

我很高興你想通了。它可以在同一個'CreateMap'調用中完成。這是一個流暢的界面,所以你可以將'ForMember'鏈接到你的內心。 – neontapir

相關問題