如何使用自动映射器使用类型转换器映射特定值?
How to map specific values using type converter using automapper?
我有具有 50 个属性的源对象和目标对象。但是其中 3 个的转换操作很长。
我想使用类型转换器映射其中的 3 个,并自动映射其他的。
public class PointEntityConverter : ITypeConverter<A, B>
{
public PointEntity Convert(A source, B destination, ResolutionContext context)
{
if (destination == null)
destination = new B();
destination.X = ConvertForX(source);
destination.Y = ConvertForY(source);
destination.Z = ConvertForZ(source);
// other properties should map automatically.
return destination;
}
.....
.....
}
我可以使用 ITypeConverter 进行此操作吗?
通常,您将使用 TypeConverter 编写从类型 A 到类型 B 的自定义映射逻辑。您仍然可以使用 IMapper 来自动映射一些复杂的属性。但是在您的情况下,您想为某些属性编写自定义映射逻辑并将其余部分留给 AutoMapper,这是 Value Resolvers 比类型转换器更适合的用例。检查下面的示例。
public class XPropertyResolver : IValueResolver<A, B, string>
{
public string Resolve(A a, B b, string destMember, ResolutionContext context)
{
//Logic Here
}
}
要使用值解析器,请在配置中执行以下操作。这将使用自动映射器逻辑从 A 映射所有 B 属性,除了 属性“X”,它将通过定义的 ValueResolver 映射。
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<A, B>()
.ForMember(dest => dest.X, o => o.MapFrom<XPropertyResolver>());
});
我有具有 50 个属性的源对象和目标对象。但是其中 3 个的转换操作很长。 我想使用类型转换器映射其中的 3 个,并自动映射其他的。
public class PointEntityConverter : ITypeConverter<A, B>
{
public PointEntity Convert(A source, B destination, ResolutionContext context)
{
if (destination == null)
destination = new B();
destination.X = ConvertForX(source);
destination.Y = ConvertForY(source);
destination.Z = ConvertForZ(source);
// other properties should map automatically.
return destination;
}
.....
.....
}
我可以使用 ITypeConverter 进行此操作吗?
通常,您将使用 TypeConverter 编写从类型 A 到类型 B 的自定义映射逻辑。您仍然可以使用 IMapper 来自动映射一些复杂的属性。但是在您的情况下,您想为某些属性编写自定义映射逻辑并将其余部分留给 AutoMapper,这是 Value Resolvers 比类型转换器更适合的用例。检查下面的示例。
public class XPropertyResolver : IValueResolver<A, B, string>
{
public string Resolve(A a, B b, string destMember, ResolutionContext context)
{
//Logic Here
}
}
要使用值解析器,请在配置中执行以下操作。这将使用自动映射器逻辑从 A 映射所有 B 属性,除了 属性“X”,它将通过定义的 ValueResolver 映射。
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<A, B>()
.ForMember(dest => dest.X, o => o.MapFrom<XPropertyResolver>());
});