#c# #automapper
#c# #automapper
Вопрос:
Для общей фильтрации внешней системы мне нужно получить исходный путь сопоставления по пути назначения.
CreateMap<Record, Contact>()
.ForMember(x => x.Id, opt => opt.MapFrom(c => c.Id))
.ForMember(x => x.PersonInformation, opt => opt.MapFrom(c=>
new PersonInformation()
{
FirstName = c.FirstName,
LastName = c.LastName,
MiddleName = c.MiddleName,
ExternalReferences = new List<ExternalReference>() { new ExternalReference { Id = 1, Ref = c.Id } }
}
))
Я создал функцию, но она работает только для простых путей, таких как:
Contact.Id => Record.Id
но он не работает с
Contact.PersonInformation.FirstName =
, будет сопоставлен с> Record.FirstName
public (PropertyInfo propertyInfo, string path) GetDestinationPropertyFor(string sourcePropertyPath, Type salesforceType, Type swaggerType)
{
var properties = sourcePropertyPath.Split('.');
var destinationProperties = new List<string>();
PropertyInfo propertyInfo = null;
foreach (var property in properties)
{
var map = _mapper.FindTypeMapFor(salesforceType, swaggerType);
var propertyMap = map.PropertyMaps.First(pm => pm.DestinationMember == swaggerType.GetProperty(property));
propertyInfo = propertyMap.SourceMember as PropertyInfo;
var jsonProperty = propertyInfo.GetCustomAttribute(typeof(JsonPropertyAttribute));
destinationProperties.Add(((JsonPropertyAttribute)jsonProperty).PropertyName);
swaggerType = propertyMap.Types.DestinationType;
salesforceType = propertyMap.Types.SourceType;
}
var destinationPropertyPath = string.Join('.', destinationProperties);
return (propertyInfo, destinationPropertyPath);
}