using AgileObjects.ReadableExpressions;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Domain.Entities;
using System.Collections.Generic;
public static void Main()
var serviceProvider = new ServiceCollection()
.AddAutoMapper(typeof(DbEntityToDomainModelProfile))
var mapper = serviceProvider.GetService<IMapper>();
var executionPlan = mapper.ConfigurationProvider.BuildExecutionPlan(typeof(UserRolesEntity), typeof(UserRoles));
var description = executionPlan.ToReadableString();
Console.WriteLine("--- Execution Plan ---");
Console.WriteLine(description);
Console.WriteLine("--- End Execution Plan ---");
var dbEntities = new List<UserRolesEntity>
Email = "email1@email.com",
Roles = @"[""administrator"", ""superadmin"", ""techcorner""]"
Email = "email2@email.com",
Roles = @"[""SystemConsoleAdministrator"", ""TelematicsEngineer"", ""OpsManager"", ""OpsEngineer""]"
var domainModels = mapper.Map<List<UserRoles>>(dbEntities);
Console.WriteLine(domainModels.GetType());
foreach (var dd in domainModels)
public class UserRoles : AggregateRoot<Guid>
public string Email { get; private set; }
public IEnumerable<string> Roles { get; private set; }
public UserRoles(Guid id, string email, IEnumerable<string> roles) : base(id)
public override string ToString()
return System.Text.Json.JsonSerializer.Serialize(this);
public class UserRolesEntity
public Guid Id { get; set; }
public string Email { get; set; }
public string Roles { get; set; }
public class DbEntityToDomainModelProfile : Profile
public DbEntityToDomainModelProfile()
CreateMap<UserRolesEntity, UserRoles>()
.ForMember(dest => dest.Roles, opt => opt.MapFrom<JsonStringToUserRolesResolver>());
public class JsonStringToUserRolesResolver : IValueResolver<UserRolesEntity, UserRoles, IEnumerable<string>>
public IEnumerable<string> Resolve(UserRolesEntity source, UserRoles destination, IEnumerable<string> destMember, ResolutionContext context)
var userRoles = JsonSerializer.Deserialize<IEnumerable<string>>(source.Roles);
return Enumerable.Empty<string>();