Как получить исходный путь сопоставления по пути назначения в Automapper

#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);
    }