3

我想将 AutoMapper 与 proto3 一起使用,但我遇到的最大问题是从可能允许的源属性映射null到永远不会这样做的原型。手动进行此类填充时,必须执行以下操作:

var proto = new Proto();

if (source.Field != null)
{
    proto.Field = source.Field;
}

我仍然觉得这很荒谬,但显然 proto3 就是这样。

无论如何,这意味着映射必须具有条件以确保null值不会传播到原型:

config
    .CreateMap<Source, Proto>()
    .ForMember(
        x => x.Field,
        options => options.Condition(source => source.Field != null));

我能感觉到这很快就变老,因为我的原型中有很多属性。

我想知道是否有办法让我在更高的抽象层次上处理这个问题?

4

1 回答 1

4

您可以ForAllOtherMembers在输出上使用方法CreateMap<Source,Proto>并指定条件。这将解决您没有为每个属性指定的问题

示例代码

config
    .CreateMap<Source, Proto>()
    .ForAllOtherMembers(
        options => options.Condition((src, dest, srcValue) => srcValue != null));
于 2019-02-13T08:46:27.507 回答