У меня есть два очень простых объекта:
public class CategoryDto
{
    public string Id { get; set; }
    public string MyValueProperty { get; set; }
}
public class Category
{
    public string Id { get; set; }
    [MapTo("MyValueProperty")]
    public string Key { get; set; }
}
При сопоставлении Category с a CategoryDto с AutoMapper мне бы хотелось:
Свойства должны отображаться как обычно, за исключением тех, которые имеют атрибут MapTo. В этом случае я должен прочитать значение Атрибута, чтобы найти целевое свойство. Значение свойства source используется для нахождения значения для ввода в свойстве назначения (с помощью словаря). Пример всегда лучше, чем 1000 слов...
Пример:
Dictionary<string, string> keys = 
    new Dictionary<string, string> { { "MyKey", "MyValue" } };
Category category = new Category();
category.Id = "3";
category.Key = "MyKey";
CategoryDto result = Map<Category, CategoryDto>(category);
result.Id               // Expected : "3"
result.MyValueProperty  // Expected : "MyValue"
Свойство Key отображается в MyValueProperty (через атрибут MapTo), а назначенное значение - "MyValue", потому что значение свойства источника - "MyKey", которое отображается (через словарь), чтобы "MyValue".
Можно ли использовать AutoMapper? Мне нужно, конечно, решение, которое работает на каждом объекте, а не только на Category/CategoryDto.