me-*_*e-- 7 c# protocol-buffers automapper proto3
我想将 AutoMapper 与 proto3 一起使用,但我遇到的最大问题是从可能允许的源属性映射null到从不允许的原型。手动进行此类填充时,必须执行以下操作:
var proto = new Proto();
if (source.Field != null)
{
proto.Field = source.Field;
}
Run Code Online (Sandbox Code Playgroud)
我仍然觉得这很荒谬,但 proto3 显然就是这样。
无论如何,这意味着映射必须有条件,以确保null值不会传播到原型:
config
.CreateMap<Source, Proto>()
.ForMember(
x => x.Field,
options => options.Condition(source => source.Field != null));
Run Code Online (Sandbox Code Playgroud)
我能感觉到它变老的速度非常快,因为我的原型中有很多属性。
我想知道是否有办法让我在更高的抽象级别上处理这个问题?
您可以ForAllOtherMembers在输出上使用方法CreateMap<Source,Proto>并指定条件。这将解决您未指定每个属性的问题
示例代码
config
.CreateMap<Source, Proto>()
.ForAllOtherMembers(
options => options.Condition((src, dest, srcValue) => srcValue != null));
Run Code Online (Sandbox Code Playgroud)