using AgileObjects.ReadableExpressions;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Values;
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<Role> Roles { get; private set; }
public UserRoles(Guid id, string email) : base(id)
public UserRoles(Guid id, string email, IEnumerable<Role> roleList) : this(id, email)
public override string ToString()
return System.Text.Json.JsonSerializer.Serialize(this);
public class Role : ValueObject
public string Name { get; private set; }
protected override IEnumerable<object> GetAtomicValues()
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<Role>>
public IEnumerable<Role> Resolve(UserRolesEntity source, UserRoles destination, IEnumerable<Role> destMember, ResolutionContext context)
var userRoles = JsonSerializer.Deserialize<IEnumerable<string>>(source.Roles);
return Enumerable.Empty<Role>();
.Select(x => new Role(x));