在Automapper 11.x中,我有一个从Guid到String的映射,如下所示:

CreateMap<CreateClientRequest, Client>(MemberList.Source)
    .ForMember(dest => dest.Id, opt => opt.Ignore())
    .ForMember(dest => dest.ClientId, opt => opt.MapFrom(src => src.ClientId.ToString())); // Guid to String

当我这样运行单元测试时:

_configuration.AssertConfigurationIsValid();

一切正常.现在我已将Automapper升级到12.x,验证失败,并显示消息:

已找到未映射的成员.查看下面的类型和成员. 添加自定义映射表达式、忽略、添加自定义解析器或修改源/目标类型 对于没有匹配的构造函数,请添加无参数的构造函数、添加可选参数或映射所有构造函数参数 ==================================================================================================================== CreateClientRequest-&gt;客户端(源成员列表) Requests.CreateClientRequest-&gt;Entities.Client(源成员列表)

未映射的属性: 客户端ID

现在我应该如何进行映射,以确保映射正确且验证成功?我试着go 看doctor ,以了解该怎么做.但我没有找到任何关于它的东西.谢谢

推荐答案

Automapper知道如何将Guid转换为string,因此您只需删除ToString()即可(因为未应用自定义格式):

e.CreateMap<CreateClientRequest, Client>(MemberList.Source)
    .ForMember(dest => dest.Id, opt => opt.Ignore())
    .ForMember(dest => dest.ClientId, opt => opt.MapFrom(s => s.ClientId));

或完全删除该行:

e.CreateMap<CreateClientRequest, Client>(MemberList.Source)
    .ForMember(dest => dest.Id, opt => opt.Ignore());

一切都会好起来的.

第10版has the following的升级指南:

Source validation

只考虑简单的源成员表达式,MapFrom(d => d.Member, s => s.SourceMember).

但我预计您的原始代码在第11版中也会失败.

如果您需要定义自定义转换,则可以使用ConvertUsing:

e.CreateMap<CreateClientRequest, Client>(MemberList.Source)
    .ForMember(dest => dest.Id, opt => opt.Ignore())
    .ForMember(dest => dest.ClientId, opt => opt.ConvertUsing(ValConverter.Instance, r => r.ClientId));

public class ValConverter : IValueConverter<Guid, string>
{
    public static ValConverter Instance { get; } = new();
    public string Convert(Guid sourceMember, ResolutionContext context) => sourceMember.ToString("B");
}

另请参见this github issue.

Csharp相关问答推荐

需要深入了解NpgSQL DateTimeOffset处理

C#自定义字典与JSON(de—)serialize

哪个nuget包含SecurityStampValidatorOptions

LINQ无法翻译SQLFunctions方法

安装附加的. exe与Visual Studio

Unity 2D自顶向下弓旋转

如何在C#中将对象[*,*]直接转换为字符串[*,*]?

如何使datagridview的列具有响应性,以便不是所有列都更改其宽度

UWP中的任务和界面

如何使用C#中的主构造函数功能使用多个构造函数?

StackExchange.Redis.RedisServerException:调用ITransaction.ExecuteAsync()时出现错误未知命令取消监视

C#使用TextFieldParser读取.csv,但无法使用";0";替换创建的列表空条目

如何让NLog停止写入冗余信息?

C#Null判断处理失败

有没有类似于扩展元素的合并元组的语法?

JSON串行化程序问题.SQLite中的空值

如何使用ODP.NET C#设置Oracle会话时间长度限制

VS代码扩展无法在新版本扩展C#中运行从v2.10.28开始

我应该为C#12中的主构造函数参数创建私有属性吗?

Windows 10上埃及标准时间的时区偏移不正确