gpt4 book ai didi

c# - AutoMapper:如何在展平时使用字符串参数 MapFrom

转载 作者:行者123 更新时间:2023-12-04 11:48:15 27 4
gpt4 key购买 nike

AutoMapper 的 MapFrom 方法有两个重载:

.MapFrom(Expression<Func<object, object>>


.MapFrom<TMember>(string)

第一个重载可以这样使用:
.ForMember(dest => dest.Date, opt => opt.MapFrom(order => order.Customer.DateOfBirth))

我尝试了这样的第二个重载:
.ForMember(dest => dest.Date, opt => opt.MapFrom<DateTime>("Order.Customer.DateOfBirth"))

但是当使用关联的属性时它不起作用。谁知道在使用展平时如何使用第二个重载?

我问这个是因为我在寻找一种动态映射的方法;例如:
.ForMember(dest => dest.Date, opt => opt.MapFrom<DateTime>(givenPropertyString))

提前致谢。

最佳答案

好像是 MapFrom过载 .MapFrom<TMember>(string)不适用于嵌套属性(我可能在这里错了)。但是,对于您的问题,您可以创建一个自定义方法来使用反射获取嵌套的子属性值。并使用它来动态映射任何属性值 string NestedPropertyName .

这是自定义方法(方法来源 here)

public static object GetNestedPropertyValue(object obj, string nestedDottedPropertyName)
{
foreach (String part in nestedDottedPropertyName.Split('.'))
{
if (obj == null)
return null;

PropertyInfo info = obj.GetType().GetProperty(part);
if (info == null)
return null;

obj = info.GetValue(obj, null);
}
return obj;
}

您可以在 MapFrom 中使用此方法动态(对于任何属性),像这样
.ForMember(dest => dest.Date, 
opt => opt.MapFrom(src => GetNestedPropertyValue(src, "Order.Customer.DateOfBirth")));

关于c# - AutoMapper:如何在展平时使用字符串参数 MapFrom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32935112/

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