TypeConverter
我这边的工作很好:
class DatabaseRecord
{
public byte[] RowVersion { get; set; }
}
class Dto
{
public string RowVersion { get; set; }
}
这个映射配置
public class Mappings : Profile
{
public static IMapper Mapper = new MapperConfiguration(c => c.AddProfile(new Mappings())).CreateMapper();
public Mappings()
{
CreateMap<string, byte[]>().ConvertUsing<Base64Converter>();
CreateMap<byte[], string>().ConvertUsing<Base64Converter>();
CreateMap<DatabaseRecord, Dto>().ReverseMap();
}
private class Base64Converter : ITypeConverter<string, byte[]>, ITypeConverter<byte[], string>
{
public byte[] Convert(string source, byte[] destination, ResolutionContext context)
=> System.Convert.FromBase64String(source);
public string Convert(byte[] source, string destination, ResolutionContext context)
=> System.Convert.ToBase64String(source);
}
}
@Lucian Bargaoanu
指出这可以通过内联转换器缩短:
CreateMap<string, byte[]>().ConvertUsing(s => System.Convert.FromBase64String(s));
CreateMap<byte[], string>().ConvertUsing(bytes => System.Convert.ToBase64String(bytes));
CreateMap<DatabaseRecord, Dto>().ReverseMap();
我可以皈依
string
(64)至
byte[]
var result = Mappings.Mapper.Map<Dto>(new DatabaseRecord
{
RowVersion = new byte[]{104,101,108,108,111} // "hello"
});
Console.WriteLine(result.RowVersion); // outputs "aGVsbG8="
var record = Mappings.Mapper.Map<DatabaseRecord>(new Dto
{
RowVersion = "aGVsbG8=" // "hello" in base64
});
// record.RowVersion == 104,101,108,108,111