如何使用AutoMapper将viewModel映射到带有数组的层次结构模型?

时间:2011-04-21 14:19:42

标签: c# arrays mapping automapper asp.net-mvc

深度模型是由许多数组代码生成的(想想基于wsdl的WCF代理生成代码),需要使用展平的视图模型填充。两个模型之间没有命名约定。

扁平模型的例子如下:

public class ViewModel
{
    public string Item1 { get; set; }
    public string Item2 { get; set; }
}

深度模型的例子如下:

public class DeepLevel0
{
    public DeepLevel1 Level1 { get; set; }
}

public class DeepLevel1
{
    public string Prop1;
    public DeepLevel2[] Level2 { get; set; }
}

public class DeepLevel2
{
    public string Prop2;
    public string Prop3;
}

结束映射结果应为以下

DeepLevel0.Level1.Prop1 = ViewModel.Item1
DeepLevel0.Level1.Level2[0].Prop2 = ViewModel.Item2
DeepLevel0.Level1.Level2[0].Prop2 = null;

我非常喜欢AutoMapper中的验证系统,知道你处理了所有属性。

我得到了以下工作(但失去了验证):

  Mapper.CreateMap<ViewModel, DeepLevel0>()
      .ForMember(d => d.Level1, opt => opt.MapFrom(s => 
          new DeepLevel1 {
                            Prop1 = s.Item1,
                            Level2 = new[]
                                        {
                                            new DeepLevel2
                                                {
                                                    Prop2 = s.Item2,
                                                    Prop3 = null
                                                }
                                        }
                        }));
    }

还有其他更好的方法吗?

1 个答案:

答案 0 :(得分:0)

不,我不这么认为。您可以随时切换到使用DeepLevel对象的构造函数,这可能会使它们整理一下。