2010-03-24 5 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 (но не List of T -> List of U).

+0

В моем DCObject есть расширение, но бизнес-объект не имеет этого свойства, и поэтому я помещаю это на место, иначе я получаю сообщение об ошибке. Также T == U в моем случае, но я хочу, чтобы список переведен в Список chugh97

+0

Это прекрасно. AutoMapper автоматически поддерживает список без дополнительной настройки. Я могу это сделать: Mapper.Map > (новый [] {1, 2, 3}); С нулевой конфигурацией. Вам нужно только регистрировать типы элементов, и поскольку типы элементов идентичны в вашем случае, дополнительная настройка не требуется. AutoMapper поддерживает назначаемые типы из коробки. –

 Смежные вопросы

  • Нет связанных вопросов^_^