gpt4 book ai didi

automapper - 如何使用 AutoMapper 为给定属性指定特定类型转换器

转载 作者:行者123 更新时间:2023-12-04 14:35:22 28 4
gpt4 key购买 nike

如何覆盖 AutoMapper 用于给定属性的类型转换器?

例如,如果我有:

public class Foo
{
public string Name { get; set; }
}

public class Bar
{
public string Name { get; set; }
}

现在我只想将 Foo.Name 映射到 Bar.Name 但使用指定的类型转换器。我知道如何使用:
Mapper
.CreateMap<Foo,Bar>()
.ForMember( x => x.Name, opt => opt.ResolveUsing<FooNameResolver>() );

但这会将转换硬编码为使用 Foo 上的 Name 属性。如果我对这个或其他类中的其他属性有相同类型的转换,我必须为每个类创建一个解析器类。

而且我不想为 string -> string 指定转换器,因为此转换特定于此属性或其他类似属性。

我只想覆盖类型转换器!我确定这一定是可能的,但我对此一无所知:-(

我追求的是这样的:
Mapper
.CreateMap<Foo,Bar>()
.ForMember( x => x.Name, opt => opt.Using<MySpecialStringConverter>() );

最佳答案

我通过 AutoMapper 的单元测试发现了答案。尽管接口(interface)很流畅,但它不是很明显,因为映射选项上的许多方法都返回 void。但是,ResolveUsing<>()不返回 void 但允许您指定更多选项。这里有解决方案:

Mapper
.CreateMap<Source,Dest>
.ForMember( dest => dest.Name,
opt => opt.ResolveUsing<MySpecialStringConverter>()
.FromMember( source => source.Name ) );

我宁愿不必指定 .FromMember当属性是 AutoMapper 无论如何都会使用的默认值并且我想要使用的只是覆盖类型转换器/解析器时。

关于automapper - 如何使用 AutoMapper 为给定属性指定特定类型转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3928912/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com