Mar*_*tin 4 c# inner-classes automapper
我有一个简单的映射,它正在工作,但它没有填写 Output.Details。
我有点困惑,我想这可能是因为我将源用作每个源的“任务”。
Mapper.CreateMap<Task, Output>();
Mapper.CreateMap<Task, Output.Details>().ForMember(
dest => dest.Item, opt => opt.MapFrom(src => src.Name));
Run Code Online (Sandbox Code Playgroud)
据我所知,我必须创建 2 张地图,1 张用于对象,1 张用于其中包含的对象。
问题是 OUTPUT 和 OUTPUT.DETAILS 的来源可以在 TASK 中找到
我尝试深入研究第一张地图中的详细信息并指定 Mapfrom 但它给出了以下错误,这就是为什么我必须创建 2 张地图
must resolve to top-level member. Parameter name: lambdaExpression error
IList<Task> tempItems= GetItems();
IList<Output> items =
Mapper.Map<IList<Task>, IList<Output>>(tempItems);
Run Code Online (Sandbox Code Playgroud)
地图有效,但我在 Output.Details 中可用的属性“Item”为 NULL
我究竟做错了什么?这是我的 Destination 对象。
它填写 Name 没问题,但 DETAILS 中没有任何内容......它们被保留为 NULL。
任务不是我的课程,但我检查了它并且所有值都在那里被复制,因此标签有一个值并且是一个字符串。
public class Output
{
public string Name { get; set; }
public Details Summary { get; private set; }
public class Details
{
public string Item{ get; set; }
}
public Output()
{
Summary = new Details();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
这是 Task 类的示例。

编辑
它们是此处的示例与 2010 项目,它准确地显示了问题。
http://dl.dropbox.com/u/20103903/AutomapperNotWorking.zip
这是显示问题的图像,您可以看到摘要项目为“NULL”,但它应该包含来自任务的名称。

首先,始终使用Mapper.AssertConfigurationIsValid();以确保您的映射配置有效。我将它添加到您的代码中,它立即突出了问题:您没有告诉 Automapper 如何处理 Summary 属性。由于 Task 不包含名为 Summary 的属性,Automapper 需要知道如何处理它。
所以问题不在于如何映射嵌套类,您只需要告诉 Automapper 如何处理摘要。这是适用于您的示例的 Automapper 配置:
Mapper.CreateMap<Task, Output>()
.ForMember(d => d.Summary, o => o.MapFrom(t => new Output.Details {Item = t.Name}));
Mapper.AssertConfigurationIsValid();
Run Code Online (Sandbox Code Playgroud)
这就是你所需要的。
| 归档时间: |
|
| 查看次数: |
4536 次 |
| 最近记录: |