CSharp · Console
using AutoMapper;
using AgileObjects.ReadableExpressions;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Domain.Entities;
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Linq;
public class Program
{
public static void Main()
{
// Setup
var serviceProvider = new ServiceCollection()
.AddAutoMapper(typeof(DbEntityToDomainModelProfile))
.BuildServiceProvider();
// Usage
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 ---");
Console.WriteLine();
var dbEntities = new List<UserRolesEntity>
{
new UserRolesEntity
{
Id = Guid.NewGuid(),
Email = "[email protected]",
Roles = @"[""administrator"", ""superadmin"", ""techcorner""]"
},
new UserRolesEntity
{
Id = Guid.NewGuid(),
Email = "[email protected]",
Roles = @"[""SystemConsoleAdministrator"", ""TelematicsEngineer"", ""OpsManager"", ""OpsEngineer""]"
}
};
var domainModels = mapper.Map<List<UserRoles>>(dbEntities);
Console.WriteLine(domainModels.GetType());
foreach (var dd in domainModels)
{
Console.WriteLine(dd);
}
}
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)
{
Email = email;
Roles = roles;
}
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);
if (userRoles == null)
{
return Enumerable.Empty<string>();
}
return userRoles;
}
}
}