RSGC – DTO Mapper – part 6
name | GeneratedMapper |
nuget |
https://www.nuget.org/packages/GeneratedMapper/ |
link | https://github.com/ThomasBleijendaal/GeneratedMapper |
author | Thomas Bleijendaal |
AutoMapping from a POCO to a DTO. Lots of customizations
The code that you start with is
public class Department { public int ID { get; set; } public string Name { get; set; } public List<string> Employees { get; set; } } [IgnoreInTarget("Employees")] [MapFrom(typeof(Department))] public class DepartmentDTO { public int ID { get; set; } public string Name{get; set;} [MapWith("Employees",typeof(ResolverLength))] public int EmployeesNr { get; set; } } public class ResolverLength { public int Resolve(List<string> input) { return ((input?.Count) ?? 0); } }
The code that you will use is
static void Main(string[] args) { var dep = new Department(); dep.Name = "IT"; dep.ID = 1; dep.Employees = new List<string>(); dep.Employees.Add("Andrei"); var dto = dep.MapToDepartmentDTO(); Console.WriteLine(dto.Name+"=>"+ dto.EmployeesNr); }
The code that is generated is
namespace DTOMapper { public static partial class DepartmentMapToExtensions { public static DTOMapper.DepartmentDTO MapToDepartmentDTO(this DTOMapper.Department self) { if (self is null) { throw new ArgumentNullException(nameof(self), "DTOMapper.Department -> DTOMapper.DepartmentDTO: Source is null."); } var resolverLength = new DTOMapper.ResolverLength(); var target = new DTOMapper.DepartmentDTO { ID = self.ID, Name = (self.Name ?? throw new GeneratedMapper.Exceptions.PropertyNullException("DTOMapper.Department -> DTOMapper.DepartmentDTO: Property Name is null.")), EmployeesNr = resolverLength.Resolve((self.Employees ?? throw new GeneratedMapper.Exceptions.PropertyNullException("DTOMapper.Department -> DTOMapper.DepartmentDTO: Property Employees is null."))), }; return target; } } }
Example Code: https://github.com/ignatandrei/RSCG_Examples/tree/main/DTOMapper