我正在使用AutoMapper
将我的MVC ViewModels
映射到DTO
然后再回来,并且想知道是否可以使用来自{{1}的TypeMap
仅通过属性名称映射值?
我的情况是:
AutoMapper
映射到ViewModel
。DTO
,验证失败。DTO
返回了FaultException
字段失败的名称。DTO
字典,其中包含失败的ModelState
属性的名称,以及错误消息。这允许我突出显示屏幕上的错误字段。所以我的问题在于能够将失败的ViewModel
属性的string
名称映射回DTO
属性。我想做这样的事情:
ViewModel
这一切都可能吗?如果必须的话,我不介意使用var typemap = Mapper.FindTypeMapFor(typeof(DTO), typeof(Model))
string erroredPropertyName = "Prop1"; // Really extracted from my Fault
// This is the bit that doesn't exist, and I need help with......
// string destination = typemap.GetDestinationFor(erroredPropertyName);
ModelState.Add(destination, errorMessage);
,但如果可以的话,我宁愿不使用它。
答案 0 :(得分:0)
我最终通过AutoMapper
找到了一个很好的方法:
public PropertyInfo MapDestinationPropertyNameToSourceProperty<TSource, TDestination>(string propertyName)
{
var typeMap = GetTypeMap<TSource, TDestination>();
var sourcePropName = typeMap.GetPropertyMaps().Where(m => m.DestinationProperty.Name == propertyName).Select(x => x.SourceMember.Name).FirstOrDefault();
if (string.IsNullOrWhiteSpace(sourcePropName))
return null;
return typeMap.SourceType.GetProperties().FirstOrDefault(n => n.Name == sourcePropName);
}
这允许我传入Destination属性的名称,并返回它从中映射的属性的PropertyInfo
。
我本来可以返回源属性名称,但是我想要完整的PropertyInfo
对象,这样我就可以在保存错误消息的属性上查找一些自定义属性。