2016-02-29 2 views
-1

Je suis en train de la carte d'étudiant avec StudentDto, c'est ce que je fais, mais il se plaint de la propriété imbriquée qui est de type List<StudentContact>Comment cartographier imbriquée Propriété avec Automapper

Les deux objets, StudentDto et étudiants ont exactement les mêmes propriétés, c'est ce que j'utilise pour essayer de mapper les objets.

var config = new MapperConfiguration( 
        cfg => cfg.CreateMap<StudentDto, Student>());     
      var mapper = config.CreateMapper(); 
      var driverActivationResponse = mapper.Map <List<Student> > (studentDto);// "studentDto" is List<StudentDto> 

mes cours

public class StudentDto 
    { 
     public StudentDto() 
     { 
      if(StudentContacts==null) StudentContacts=new List<StudentContact>(); 
     } 
     public string Id { get; set; } 
     public List<StudentContact> StudentContacts { get; set; } 

    } 

    public class Student 
    { 
     public Student() 
     { 
      if(StudentContacts==null) StudentContacts=new List<StudentContact>(); 
     } 
     public string Id { get; set; } 
     public List<StudentContact> StudentContacts { get; set; } 

    } 

    public class StudentContact 
    { 
     public string ContactName { get; set; } 
     public string PrimaryContactNo { get; set; } 
    } 
+0

Comment se plaignent-ils *? Un message d'exception est ce dont nous avons besoin. –

Répondre

0

Est-il utile de préciser le type de collecte de source et le type de collecte de destination dans votre Map appel?

var driverActivationResponse = mapper.Map<List<Student>, List<StudentDto>>(studentDto); 

Il ressemble le code AutoMapper que vous avez est correct. Si vous obtenez toujours une erreur, quelque chose d'autre doit être faux. Peut-être que votre studentDto n'est pas vraiment un List<StudentDto>?

Dans tous les cas, voici un exemple ensemble qui fonctionne sans erreur:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using AutoMapper; 

namespace ConsoleSandbox 
{ 
    class Program 
    { 
     public static void Main() 
     { 
      var config = new MapperConfiguration(
       cfg => cfg.CreateMap<StudentDto, Student>()); 
      var mapper = config.CreateMapper(); 
      var studentDtos = new[] 
      { 
       new StudentDto 
       { 
        Id = "1", 
        StudentContacts = new[] 
        { 
         new StudentContact { ContactName = "Dan", PrimaryContactNo = "123" }, 
         new StudentContact { ContactName = "Stan", PrimaryContactNo = "456" }, 
        }.ToList() 
       }, 
       new StudentDto 
       { 
        Id = "2", 
        StudentContacts = new[] 
        { 
         new StudentContact { ContactName = "Foo", PrimaryContactNo = "789" }, 
         new StudentContact { ContactName = "Bar", PrimaryContactNo = "101112" }, 
        }.ToList() 
       }, 
      }.ToList(); 
      var driverActivationResponse = mapper.Map<List<Student>>(studentDtos); 
      Console.WriteLine($"Contacts Count: {driverActivationResponse.Count}"); 
      Console.ReadKey(); 
     } 
    } 

    public class StudentDto 
    { 
     public string Id { get; set; } 
     public List<StudentContact> StudentContacts { get; set; } 

     public StudentDto() 
     { 
      if (StudentContacts == null) StudentContacts = new List<StudentContact>(); 
     } 
    } 

    public class Student 
    { 
     public string Id { get; set; } 
     public List<StudentContact> StudentContacts { get; set; } 

     public Student() 
     { 
      if (StudentContacts == null) StudentContacts = new List<StudentContact>(); 
     } 
    } 

    public class StudentContact 
    { 
     public string ContactName { get; set; } 
     public string PrimaryContactNo { get; set; } 
    } 
} 
+0

non, je l'ai déjà essayé. – Shax

+0

@Shax, s'il vous plaît voir ma réponse éditée. J'ai ajouté un exemple de code complet qui fonctionne. J'espère que cela vous mènera à comprendre ce qui ne va pas. – devuxer

0

Cela devrait aider -

 AutoMapper.Mapper.CreateMap<Student, StudentDto>() 
      .ForMember(a => a.StudentContacts, b => b.ResolveUsing(c => c.StudentContacts)); 

     var map = Mapper.Map<StudentDto>(new Student 
     { 
      Id = "100", 
      StudentContacts = new List<StudentContact> 
      { 
       new StudentContact{ContactName = "test",PrimaryContactNo = "tset"} 
      } 
     }); 

vous ne pouvez pas la carte comme mapper.Map <List<Student>>(studentDto);. Le membre de niveau supérieur ne peut pas être une liste lors de l'utilisation d'automapper.

+0

son ne fonctionne pas. – Shax

+0

quelle partie ne fonctionne pas? –

+0

donnant une erreur à cette ligne "var map = Mapper.Map (nouveau étudiant" – Shax