【发布时间】:2015-10-20 19:16:03
【问题描述】:
我有两个非常简单的对象:
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; }
}
当使用 AutoMapper 将 Category 映射到 CategoryDto 时,我想要以下行为:
属性应照常映射,但具有MapTo 属性的属性除外。在这种情况下,我必须读取 Attribute 的值才能找到目标属性。源属性的值用于查找要注入目标属性的值(在字典的帮助下)。一个例子总比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”,它被映射(通过字典)到“我的价值”。
这可以使用 AutoMapper 吗?我当然需要一个适用于每个对象的解决方案,而不仅仅是 Category/CategoryDto。
【问题讨论】:
-
为什么需要属性,在第一步中,您可以设置自定义映射并将属性键映射到值。这可能吗?
-
我想创建一个可以在任何地方使用的通用映射器......然后我可以将任何实体映射到任何 dto 而不需要任何额外的代码......
-
恕我直言,你让你的实体对它不应该负责的事情负责。视图模型应该定义它应该从哪里获取构建自身所需的数据,而不是相反。
标签: c# .net mapping automapper