Automapper - не может разрешить общий список - PullRequest
0 голосов
/ 24 марта 2010
 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, пожалуйста, помогите.

1 Ответ

1 голос
/ 24 марта 2010

Вы должны быть в состоянии разбить линию для ValidPlaces:

Mapper.CreateMap<BusinessObject, Proxy.DataContacts.DCObject>()
 .ForMember(x => x.ExtensionData, y => y.Ignore());

Преобразователи значений предназначены для пользовательского класса, который выполняет разрешение значений, и должны иметь тип IValueResolver. Это какое-то защитное кодирование, которое я должен поставить на место. Но для Списка T -> Список U, пока AutoMapper может отображать T -> U, это будет работать. В вашей ситуации, так как T == U, вам не нужно делать ничего лишнего. В противном случае вам нужно отобразить T на U (но не на Список T -> Список на U).

...