【问题标题】:Pragmattic use of AutoMapper with Google Protocol Buffers 3AutoMapper 与 Google Protocol Buffers 3 的务实使用
【发布时间】:2019-02-13 04:12:49
【问题描述】:

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

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));

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

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

【问题讨论】:

  • 这可能有帮助吗? github.com/AutoMapper/AutoMapper/issues/… 如果是,我将作为答案发布
  • 我现在就用这个​​,这似乎比你链接中的更简单:.ForAllMembers(options =&gt; options.Condition((_, __, sourceMember) =&gt; sourceMember != null))
  • 是的,因为该解决方案也涵盖了值类型,我猜您不需要它。

标签: c# automapper protocol-buffers proto3


【解决方案1】:

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

示例代码

config
    .CreateMap<Source, Proto>()
    .ForAllOtherMembers(
        options => options.Condition((src, dest, srcValue) => srcValue != null));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多