深度模型是由许多数组代码生成的(想想基于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
}
}
}));
}
还有其他更好的方法吗?
答案 0 :(得分:0)
不,我不这么认为。您可以随时切换到使用DeepLevel对象的构造函数,这可能会使它们整理一下。