我有一个问题,从转换一个简单的类与属性类也类本身称为ProductDataField
public class ProductDataField
{
public string Value { get; set; }
public string Name{ get; set; }
}
来源:
public class ProductDetailsViewModel
{
public CultureInfo Language { get; set; }
public string SeoTitle { get; set; }
public string SeoDescription { get; set; }
public string SeoKeywords { get; set; }
public string ProductFamily { get; set; }
}
桌子:
public class DetailsComplexViewModel
{
public ProductDataField Language { get; set; }
public ProductDataField SeoTitle { get; set; }
public ProductDataField SeoDescription { get; set; }
public ProductDataField SeoKeywords { get; set; }
public ProductDataField ProductFamily { get; set; }
}
我正在尝试映射"名称"。属性转换为"ProductDataField"中的"productdetailsviewmodel"中的属性名。和"value";属性设置为属性的值。
我试过用CreateMap映射它们,但我总是得到像
这样的错误"Expression 'x =>x.ProductFamily。值必须解析为顶级成员,而不是任何子对象的属性
如有任何帮助,不胜感激
这并不是AM的真正用途,也许只是使用反射会更好,但它可以做到:)
CreateMap<object, ProductDataField>().ConvertUsing((s,_, c)=>new ProductDataField { Value = s as string, Name = (string) c.Items["member"] });
CreateMap<ProductDetailsViewModel, DetailsComplexViewModel>().ForAllMembers(o=>o.PreCondition((ResolutionContext c)=>(c.Items["member"] = o.DestinationMember.Name) != null));
和Map
调用:
Map<DetailsComplexViewModel>(new ProductDetailsViewModel { SeoTitle = "title", SeoDescription = "descr" }, _=>{} )