MapperGeneric 1.0.0
dotnet add package MapperGeneric --version 1.0.0
NuGet\Install-Package MapperGeneric -Version 1.0.0
<PackageReference Include="MapperGeneric" Version="1.0.0" />
<PackageVersion Include="MapperGeneric" Version="1.0.0" />
<PackageReference Include="MapperGeneric" />
paket add MapperGeneric --version 1.0.0
#r "nuget: MapperGeneric, 1.0.0"
#:package MapperGeneric@1.0.0
#addin nuget:?package=MapperGeneric&version=1.0.0
#tool nuget:?package=MapperGeneric&version=1.0.0
Contenido
- [Implementacion](## 1.-Implementacion)
- [Demostracion](## 2.-Demostracion)
- [Ejemplo](## 3.-Repositorio con codigo y ejemplo)
1.-Implementacion
Para usar el Nuget debemos crear nuestras clases de Entidad de dominio en este caso como ejemplo tenemos una clase Request que dentro tiene un campo para el mensaje de rabbit a traves de la clase Rabbit.
Clase Request:
public class Request
{
public string Message { get; set; }
public string Code { get; set; }
public Rabbit Rabbit { get; set; }
}
Clase Rabbit:
public class Rabbit
{
public string TraceId { get; set; }
public string Message { get; set; }
public string Status { get; set; } = "EXITOSO";
}
Tendremos que crear otra clase en alguna otra capa que amerite un DTO, crearemos el DTO en base a los datos que requeramos en esta.
Clase RequestDTO:
public class RequestDTO
{
public string Name { get; set; }
public string Message { get; set; }
public string Code { get; set; }
public DateTime RequestDate { get; set; }
public string RabbitTraceId { get; set; }
public string RabbitMessage { get; set; }
}
Aclaratorias:
Como podemos observar tenemos los campos 'RabbitTraceId' y 'RabbitMessage' estos seran los campos que traeran la informacion de 'Rabbit.TraceId' y 'Rabbit.Message' es muy importante que apliquemos UpperCammelCase para realizar el nombramiento de los campos en nuestro DTO, si hubieramos querido traer el dato 'Rabbit.Status' de nuestra entidad de dominio debimos colocarlo como 'RabbitStatus'.
Por lo anterior expuesto podemos ver que nuestro Mapper aplanara los datos, por tal se debe tener en consideracion si queremos mantener los objetos concatenados internamente aplicar alguna logia creando los DTO's necesarios para esta accion.
Es muy importante que la clase de creacion de nuestro DTO lleve en su nombre la palabra 'dto' tal que sea 'ClaseDTO', 'ClaseDto' o 'Clasedto', ya que servira para la reversion en el caso que necesitemos mapear un DTO a entidad.
2.-Demostracion
Podemos probar nuestro mapper creando algun objeto en base a las clases expuestas anteriormente, este se transformara en DTO y a traves de una logica de perfiles interna podra hacer el reverso, por tanto tendremos un mapper Entity → DTO y DTO → Entity.
//DTO:
var requestDTO = new RequestDTO
{
Name = "Request",
Message = "Request message",
Code = "200",
RequestDate = DateTime.Now,
RabbitTraceId = "xxx-xxx-xxx-xxx",
RabbitMessage = "service-ok"
};
//Entity:
var request = new Request
{
Message = "Response message",
Code = "404",
Rabbit = new Rabbit
{
TraceId = "yyy-yyy-yyy-yyy",
Message = "service-failed"
}
};
var configuration = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Request, RequestDTO>()
.ReverseMap();
});
RequestDTO requestDTOResult = MapperGeneric<Request, RequestDTO>.Map(request);
Console.WriteLine("Entity(Request) to DTO(RequestDTO): ");
Console.WriteLine("Result DTO: "+JsonSerializer.Serialize(requestDTOResult));
Console.WriteLine("DTO(RequestDTO) to Entity(Request): ");
Request requestResult = MapperGeneric<RequestDTO, Request>.Map(requestDTO);
Console.WriteLine("Result Entity: " + JsonSerializer.Serialize(requestResult));
3.-Repositorio con codigo y ejemplo
- Más información sobre la implementación:
Para ampliar esta documentación se presenta un wiki el cual se anexa en el siguiente enlace
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net6.0
- AutoMapper (>= 11.0.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|