【发布时间】:2021-07-27 23:50:50
【问题描述】:
每个端点都有很多自动生成的类似 API 模型(我无法更改!)并且喜欢映射到单个目的地。
例如,如果我想从 Dun&Bradstreet API 映射 IDRCleanseMatch.json 和 cmpelkv2.json 端点:
Api1.Organization → OrganizationDestinationModel
Api2.Organization → OrganizationDestinationModel
以下是源模型和目标模型:
namespace Api1
{
public class Organization
{
public string Duns { get; set; }
public DunsControlStatus DunsControlStatus { get; set; }
public string PrimaryName { get; set; }
//...
}
public class DunsControlStatus
{
public OperatingStatus OperatingStatus { get; set; }
//...
}
public class OperatingStatus
{
public string Description { get; set; }
public int? DnbCode { get; set; }
//...
}
}
namespace Api2 { /* Same as above. */ }
public class OrganizationDestinationModel
{
public string Duns { get; set; }
public string Name { get; set; }
public bool IsOutOfBusiness { get; set; }
}
我的方法是使用通用辅助方法:
config.MapToOrganizationDestinationModel<Api1.Organization>();
config.MapToOrganizationDestinationModel<Api2.Organization>();
private static void MapToOrganizationDestinationModel<TSource>(this IMapperConfigurationExpression config)
{
config
.CreateMap<TSource, OrganizationDestinationModel>()
.ForMember(
destination => destination.Name,
options => options.MapFrom(nameof(Api1.Organization.PrimaryName))
)
// Doesn't work!!!
// ArgumentException : 'DunsControlStatus.OperatingStatus.DnbCode' is not a member of type 'Core.Api1.Organization' (Parameter 'propertyOrFieldName')
.ForMember(
destination => destination.IsOutOfBusiness,
options => options.ConvertUsing(
new IsOutOfBusinessConverter(),
$"{nameof(Api1.Organization.DunsControlStatus)}.{nameof(Api1.DunsControlStatus.OperatingStatus)}.{nameof(Api1.OperatingStatus.DnbCode)}"
)
)
;
}
public class IsOutOfBusinessConverter : IValueConverter<int?, bool>
{
public bool Convert(int? code, ResolutionContext _) => code == 403;
}
但我完全被以下IsOutOfBusiness 映射所困扰!有没有机会将int? → bool 转换为字符串并将Organization.DunsControlStatus.OperatingStatus.DnbCode 指向我的“非类型化”映射。
【问题讨论】:
-
请edit您的问题将您的源代码包含为minimal reproducible example,其他人可以对其进行测试并显示您希望如何使用自动映射器。
-
能否请包括您要映射的源 (Api1.Organization) 和目标 (OrganizationDestinationModel) 模型?
-
不客气。我推送了所有必要的代码来运行一个最小的例子。
标签: c# automapper