2017-05-04 113 views
0

使用自動映射器我試圖將一個對象映射到另一個對象。一個屬性是一個名爲Task的類,其中包含一個客戶列表。另一個類叫做結果,包含客戶數量和另一個客戶列表。使用自動映射器映射客戶列表

這是我的當前方法,它將信息正確地填充到順序屬性中,但在結果中仍然失敗,但仍然爲空。我怎樣才能得到列表的結果?我如何需要更改地圖,是否需要在兩個方向創建地圖,或者這不是必需的?

Mapper.Initialize(cfg => 
{ 
    cfg.CreateMap<CustomerPost.RootObject, Customers.RootObject>(); 

    cfg.CreateMap<CustomerPost.Order, Customers.Order>(); 

    cfg.CreateMap<Customers.Result, CustomerPost.Task>();     
    cfg.CreateMap<CustomerPost.Task, Customers.Result>() 
     .ForMember(x => x.customerscount, opt => opt.Ignore()) 
     .ForMember(x => x.customerstotalcount, opt => opt.Ignore()); 
}); 
try 
{ 
    Mapper.AssertConfigurationIsValid(); 
} 
catch (AutoMapperConfigurationException ex) 
{ 
    //TODO: Handle this 
    throw ex; 
} 

var customer = Mapper.Map<CustomerPost.RootObject, Customers.RootObject>(input); 

這裏是我當前的類(客戶):

public class Result 
    { 
     public int customerstotalcount { get; set; } 
     public int customerscount { get; set; } 
     public List<Customer> customers { get; set; } 
    } 

    public class RootObject 
    { 
     public Status status { get; set; } 
     public Order order { get; set; } 
     public Result result { get; set; } 
    } 

CustomerPost:

public class Task 
    { 
     public List<Customer> customers { get; set; } 
    } 

    public class RootObject 
    { 
     public Order order { get; set; } 
     public List<Task> tasks { get; set; } 
    } 
+0

你能否創建一個更小的問題再現問題?我試圖重建這個問題,但是這個難題有很多缺失的部分。 – lxalln

+0

我已經清除了代碼。也許現在這是更直接的,這樣你就可以重現錯誤。我想要做的是將列表綁定到另一個屬性。應該是簡單的..唉,它不是 – Zoba

回答

0

好了,解決我的問題,我的映射沒有找到 「結果」所以我剛剛映射我的RootObject是這樣的:

Mapper.Initialize(cfg => 
         { 
          cfg.CreateMap<CustomerPost.RootObject, Customers.RootObject>() 
           .ForMember(x => x.status, opt => opt.Ignore()) 
           .ForMember(x => x.order, opt => opt.Ignore()) 
           .ForMember(dest => dest.result, src => src.MapFrom(opt => opt.tasks.FirstOrDefault())); 

然後我繼續,只是映射的結果是這樣的:

var result = Mapper.Map<CustomerPost.Task, Customers.Result>(input.tasks.FirstOrDefault()); 

var customer = new Customers.Customer(); 
customer = result.customers.FirstOrDefault(); 

,只是其綁定到一個新的Customerobject。然後我所有的信息都按預期發送