2017-05-04 1 views
0

오토 맵퍼 사용 하나의 객체를 다른 객체에 매핑하려고합니다. 하나의 속성은 고객 목록이 포함 된 Task라는 클래스입니다. 다른 클래스는 결과 라 불리며 고객의 수와 다른 고객 목록을 포함합니다.지도 오토캡을 사용하는 고객 목록

이것은 정보를 주문 속성에 올바르게 채우지 만 결과는 여전히 null 인 현재 방식입니다. 목록을 결과로 가져 오려면 어떻게해야합니까? 지도를 변경하고 양방향으로지도를 만들 필요가 있나요? 아니면이 필요하지 않습니다.

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

내 문제에 대한 해결책은 내 매핑이 좋아 찾을 수 없습니다되었다 있도록 "결과"

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 : 여기

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); 

내 현재의 클래스 (고객)입니다 그래서 방금 다음과 같이 내 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())); 
(210)

그럼 내가 나서서 바로이 같은 결과 매핑 :

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

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

을 단지 새로운 Customerobject에 바인딩됩니다. 그렇다면 내 모든 정보가 예상대로 전송되었습니다.

관련 문제