2013-05-15 55 views
2

我試圖映射兩個對象是大多與AutoMapper但一個成員(AudioSummary)類似引發以下異常:映射此屬性需要什麼表達式?

上EchoNestModel.AudioSummary下列財產不能映射:AudioSummary

添加自定義映射表達式,忽略,添加自定義解析器或修改目標類型EchoNestModel.AudioSummary。

上下文:

- 映射到從EchoNest.Api.AudioSummary屬性AudioSummary到EchoNestModel.AudioSummary

- 從型EchoNest.Api.TrackProfile映射到EchoNestModel.Profile

類型'AutoMapper.AutoMapperConfigurationException'的異常被拋出。

映射定義

var map = Mapper.CreateMap<TrackProfile, Profile>(); 
map.ForMember(dest => dest.ForeignIds, opt => opt.ResolveUsing<ForeignIdResolver>()); 
map.ForMember(dest => dest.ForeignReleaseIds, opt => opt.ResolveUsing<ForeignReleaseIdResolver>()); 
map.ForMember(s => s.Media, t => t.Ignore()); 
map.ForMember(s => s.ProfileId, t => t.Ignore()); 
map.ForMember(s => s.AudioSummary, t => t.MapFrom(s => s.AudioSummary)); 

我已經添加了以下兩行,但一個完全不同的錯誤發生時:

map.ForMember(s => s.AudioSummary.Profile, t => t.Ignore()); 
map.ForMember(s => s.AudioSummary.AudioSummaryId, t => t.Ignore()); 

表達的=> s.AudioSummary.Profile'必須解析爲頂級成員,而不是任何子對象的屬性。

改爲在子類型或AfterMap選項上使用自定義解析器。

參數名:lambdaExpression

我怎樣才能成功映射AudioSummary

Source對象

enter image description here

目標對象 enter image description here

回答

2

編輯:一般來說,應儘量AutoMapper.Mapper.AssertConfigurationIsValid();,這將顯示在您的映射設置中的所有可能出現的問題。

從您提供的信息,它看起來像你需要定義地圖的AudioSummary類(蒸餾水和源),以及:

[TestFixture] 
    public class MappingTest 
    { 
     public class SourceAudioSummary 
     { 
      public int Id { get; set; } 
      public string OtherData { get; set; } 
     } 

     public class TrackProfile 
     { 
      public string Whatever { get; set; } 
      public SourceAudioSummary AudioSummary { get; set; } 
     } 

     public class DestAudioSummary 
     { 
      public int Id { get; set; } 
      public string OtherData { get; set; } 
     } 

     public class Profile 
     { 
      public string Whatever { get; set; } 
      public DestAudioSummary AudioSummary { get; set; } 
     } 

     [Test] 
     public void Mapping() 
     { 
      Mapper.CreateMap<SourceAudioSummary, DestAudioSummary>(); 
      Mapper.CreateMap<TrackProfile, Profile>(); 

      var trackProfile = new TrackProfile 
       { 
        Whatever = "something", 
        AudioSummary = new SourceAudioSummary 
         { 
          Id = 1, 
          OtherData = "other" 
         } 
       }; 

      var profile = Mapper.Map<TrackProfile, Profile>(trackProfile); 

      Assert.That(profile.Whatever == "something"); 
      Assert.That(profile.AudioSummary.Id == 1); 
      Assert.That(profile.AudioSummary.OtherData == "other"); 
     } 
    } 
+0

大,謝謝! – Aybe

+0

其實我得到另一個錯誤:提供的值是EchoNest.Api.TrackProfile類型,但期望System.String []。 更改值解析器源類型,或使用FromMember重定向提供給值解析器的源值。 – Aybe

+2

在答案中看到編輯 –