Stiamo cercando di mappare un oggetto - un Tridion in uscita e-mail di contatto - che ha un tipo di proprietà dizionario personalizzato con un costruttore interna - ExtendedDetailCollectionMapping ad un tipo personalizzato che ha un costruttore interna
E 'mappatura fine dall'oggetto su un ViewModel
Mapper.CreateMap<Contact,ContactViewModel>()
.ForMember(x=>x.Name, m=>m.MapFrom(x=>x.ExtendedDetails["Name"].StringValue))
ma il contrario non funziona
Abbiamo cercato:
Mapper.CreateMap<ContactViewModel,Contact>()
.ForMember(x=>x.ExtendedDetails["Name"].Value, m => m.MapFrom(x=>x.Name));
ma che genera un'eccezione di runtime.
Edit: Il messaggio di eccezione è:
AutoMapper.AutoMapperConfigurationException: configurazione personalizzata per membri è supportato solo per alto livello singoli membri su un tipo.
Abbiamo anche provato i vari convertitori di tipi e risolutori di valore, ma nessuno ci permettono di ottenere l'oggetto viene mappato, che è quello che abbiamo bisogno di ottenere l'accesso al fine di mappare i ExtendedDetails oggetto.
Mapper.CreateMap<ContactViewModel,Contact>()
.ForMember(x=>x.ExtendedDetails, m => ????);
Esiste uno schema per questo o è più semplice utilizzare un metodo statico?
Qual è l'eccezione che si ottiene, è il problema che AutoMapper non è in grado di istanziare un'istanza di quel dizionario? –
Forse questo aiuterà. http://stackoverflow.com/questions/9110815/automapper-map-from-one-object-to-nested-objects Ho utilizzato un valore personalizzato Resolver per mappare da oggetti interni. –
@TrevorPilley Sì, questo è il problema. Aggiornerò con l'eccezione ora. Non c'è modo di creare un'istanza diretta del dizionario dettagliato e Value Resolver si aspetta di creare la classe da sé se si tratta di una classe. Non riesco a trovare un modo per passare la proprietà ExtendedDetails come valore iniziale. –