Mapeo de tipo complejo a tipo primitivo usando AutoMapper en C#

Mapeo de tipo complejo a tipo primitivo usando AutoMapper en C#

Asignación de tipo complejo a tipo primitivo usando AutoMapper en C#

En este artículo, voy a discutir cómo mapear el tipo complejo al tipo primitivo usando AutoMapper en C# con ejemplos Lea nuestro artículo anterior donde discutimos el Mapeo complejo de Automapper con algunos ejemplos. Al final de este artículo, comprenderá cuándo y cómo asignar un tipo complejo a un tipo primitivo mediante el mapeador automático.

¿Cuándo asignar tipo complejo a tipo primitivo usando AutoMapper en C#?

Cuando una clase contiene tipos primitivos o puede decir los tipos simples y la otra clase contiene tipos complejos involucrados en el mapeo, entonces en tales escenarios necesitamos Mapear el Tipo Complejo al Tipos primitivos. Comprendamos cómo asignar un tipo complejo a un tipo primitivo usando AutoMapper en C# con un ejemplo. Aquí, en esta demostración, vamos a utilizar las siguientes tres clases (Empleado, EmpleadoDTO y Dirección).

Como se muestra en la imagen de arriba, aquí queremos mapear la propiedad compleja dirección de la clase Empleado a la Ciudad, Estado y País propiedades de EmployeeDTO clase.

¿Cómo mapear tipo complejo a tipo primitivo usando AutoMapper en C#?

Para mapear el tipo complejo a los tipos primitivos, necesitamos usar ForMember y especificar las propiedades de origen y destino. Aquí, necesitamos asignar las propiedades de ciudad, estado y país del objeto Dirección a las propiedades Ciudad, estado y país de la clase EmployeeDTO. Para hacer esto, necesita inicializar la configuración de Mapper como se muestra a continuación.

Como se muestra en la imagen de arriba, mapeamos cada propiedad del tipo complejo (dirección ) del objeto de origen (Empleado ) a las propiedades correspondientes del objeto de destino (EmployeeDTO ).

El código completo del ejemplo anterior.
using System;
using AutoMapper;
namespace AutoMapperDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Address empAddres = new Address()
            {
                City = "Mumbai",
                State = "Maharashtra",
                Country = "India"
            };
            Employee emp = new Employee();
            emp.Name = "James";
            emp.Salary = 20000;
            emp.Department = "IT";
            emp.address = empAddres;

            var mapper =InitializeAutomapper();
            var empDTO = mapper.Map<EmployeeDTO>(emp);

            Console.WriteLine("Name:" + empDTO.Name + ", Salary:" + empDTO.Salary + ", Department:" + empDTO.Department);
            Console.WriteLine("City:" + empDTO.City + ", State:" + empDTO.State + ", Country:" + empDTO.Country);
            Console.ReadLine();
        }
        
        static Mapper InitializeAutomapper()
        {

            var config = new MapperConfiguration(cfg => {
                cfg.CreateMap<Employee, EmployeeDTO>()
               .ForMember(dest => dest.City, act => act.MapFrom(src => src.address.City))
               .ForMember(dest => dest.State, act => act.MapFrom(src => src.address.State))
               .ForMember(dest => dest.Country, act => act.MapFrom(src => src.address.Country));
            });
            
            var mapper = new Mapper(config);
            return mapper;
        }
    }

    public class Employee
    {
        public string Name { get; set; }
        public int Salary { get; set; }
        public string Department { get; set; }
        public Address address { get; set; }
    }
    public class EmployeeDTO
    {
        public string Name { get; set; }
        public int Salary { get; set; }
        public string Department { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string Country { get; set; }
    }

    public class Address
    {
        public string City { get; set; }
        public string State { get; set; }
        public string Country { get; set; }
    }
}

Ahora ejecuta la aplicación y verás el resultado esperado como se muestra a continuación.

Asignación de propiedades primitivas a un tipo complejo usando Automapper:

Ahora queremos asignar las propiedades de tipo primitivo del objeto de origen a un tipo complejo del objeto de destino como se muestra en la imagen a continuación.

Como puede ver en la imagen de arriba, ahora queremos mapear la Ciudad, Estado y País Propiedades de la fuente (Empleado ) objeto a la propiedad de dirección del destino (EmployeeDTO ) objeto. Para lograr esto, debe usar proyección en AutoMapper . Por lo tanto, debe cambiar la configuración del mapeador como se muestra a continuación.

Como puede ver en la imagen de arriba, proyectamos un objeto (Tipo de dirección ) usando el MapForm y los valores de ciudad, estado y país provienen del objeto de origen.

A continuación se muestra el ejemplo completo
using System;
using AutoMapper;
namespace AutoMapperDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Address empAddres = new Address()
            {
                City = "Mumbai",
                State = "Maharashtra",
                Country = "India"
            };
            Employee emp = new Employee();
            emp.Name = "James";
            emp.Salary = 20000;
            emp.Department = "IT";
            emp.City = "Mumbai";
            emp.State = "Maharashtra";
            emp.Country = "India";

            var mapper =InitializeAutomapper();
            var empDTO = mapper.Map<EmployeeDTO>(emp);

            Console.WriteLine("Name:" + empDTO.Name + ", Salary:" + empDTO.Salary + ", Department:" + empDTO.Department);
            Console.WriteLine("City:" + empDTO.address.City + ", State:" + empDTO.address.State + ", Country:" + empDTO.address.Country);
            Console.ReadLine();
        }
        
        static Mapper InitializeAutomapper()
        {

            var config = new MapperConfiguration(cfg => {
                cfg.CreateMap<Employee, EmployeeDTO>()
                .ForMember(dest => dest.address, act => act.MapFrom(src => new Address()
                {
                    City = src.City,
                    State = src.State,
                    Country = src.Country
                }));
            });
            
            var mapper = new Mapper(config);
            return mapper;
        }
    }

    public class Employee
    {
        public string Name { get; set; }
        public int Salary { get; set; }
        public string Department { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string Country { get; set; }
    }
    public class EmployeeDTO
    {
        public string Name { get; set; }
        public int Salary { get; set; }
        public string Department { get; set; }
        public Address address { get; set; }
    }

    public class Address
    {
        public string City { get; set; }
        public string State { get; set; }
        public string Country { get; set; }
    }
}

Cuando ejecute la aplicación, mostrará el resultado esperado como se muestra a continuación.

En el próximo artículo, voy a hablar sobre Reverse Mapping usando AutoMapper en C# con ejemplos Aquí, en este artículo, trato de explicar cómo mapear el tipo complejo al tipo primitivo usando AutoMapper en C# y viceversa con ejemplos Espero que este artículo de tipo complejo a tipo primitivo usando AutoMapper en C# lo ayude con su necesidad. Me gustaría tener sus comentarios. Publique sus comentarios, preguntas o comentarios sobre este artículo.