2010-03-24 4 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; } 
} 

fonctionne Mapper.CreateMap trouvent quand Mapper.AssertConfigurationIsValid(); (sans exception jetés sur cette ligne) est appelée, mais quand je l'appelle en fait dans le service WCF sur la ligne suivante qui ne figure pas ici la Lancements d'Automapper et exception indiquant que ValidPlaces n'a pas pu être mappé. Cela fonctionne très bien si je mets Ignore() sur la propriété ValidPlaces mais, idéalement, je veux que cela soit passé.Automapper -ne peut résoudre la liste générique

Tous les experts AutoMapper peuvent vous aider.

Répondre

1

Vous devriez être en mesure de fossé la ligne pour ValidPlaces:

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

résolveurs de valeur sont pour une classe personnalisée pour faire la résolution de valeur et doit être de type IValueResolver. C'est un code défensif que je devrais mettre en place. Mais pour Liste de T -> Liste de U, tant qu'AutoMapper peut mapper T -> U, cela fonctionnera. Dans votre situation, puisque T == U, vous n'avez rien à faire de plus. Sinon, vous devez mapper T à U (mais pas Liste de T -> Liste de U).

+0

Mon DCObject a extensiondata mais l'objet métier n'a pas cette propriété et par conséquent je l'ai mis en place sinon j'obtiens une erreur. Aussi T == U dans mon cas mais je veux Liste traduit en Liste chugh97

+0

C'est bien. AutoMapper prend en charge la liste automatiquement, sans aucune configuration supplémentaire. Je peux le faire: Mapper.Map > (nouveau [] {1, 2, 3}); Avec une configuration nulle. Vous avez seulement besoin d'enregistrer les types d'éléments, et puisque les types d'éléments sont identiques dans votre cas, aucune configuration supplémentaire n'est nécessaire. AutoMapper prend en charge les types assignables prêts à l'emploi. –

Questions connexes