我的上下文中有一个对象:
abstract public partial class MyAbstractObject
{
public int Id{set;get;}
public string Name{set;get;}
}
public partial class MyChildObject: MyAbstractObject
{
public string Details {set;get;}
}
我有一个对象的视图模型:
public class MyAbstractViewModel
{
public int Id{set;get;}
public string Name{set;get;}
}
public class MyChildViewModel: MyAbstractViewModel
{
public string Details {set;get;}
}
现在将我的视图模型转换为我使用的对象:
public MyChildObject MakeChildObject(MyChildViewModel vm)
{
var child = new MyChildObject();
child.Id = vm.Id;
child.Name = vm.Name;
child.Details= vm.Details;
return child;
}
MyAbstractObject
属性中的问题。如果我有几个子对象,我为每个子对象创建一个MakeChildObject
方法。所有这些方法对MyAbstractObject
属性都有相同的代码行:
child.Id = vm.Id;
child.Name = vm.Name;
如何最小化我的代码?
答案 0 :(得分:2)
考虑是否可以在您的情况下使用AutoMapper。它将根据属性名称自动映射不同类型的对象。它可能会节省您自己编写所有映射代码的时间。
https://github.com/AutoMapper/AutoMapper
然后你将像这样引导映射器:
Mapper.CreateMap<MyChildViewModel, MyChildObject>();
而不是您的方法MakeChildObject
,您将使用以下内容:
MyChildObject vmMapped = Mapper.Map<MyChildViewModel>(vm);
答案 1 :(得分:1)
尝试以下代码示例来解决您的问题。
public class MyAbstractViewModel
{
public int Id{set;get;}
public string Name{set;get;}
public void MakeChildObject(MyAbstractViewModel vm, MyAbstractObject child)
{
child.Id = vm.Id;
child.Name = vm.Name;
}
}
public class MyChildViewModel: MyAbstractViewModel
{
public string Details {set;get;}
public MyChildObject MakeChildObject(MyChildViewModel vm)
{
var child = new MyChildObject();
this.MakeChildObject(this, child);
child.Details= vm.Details;
return child;
}
}
答案 2 :(得分:0)
看看automapper http://automapper.org/
它会自动映射类似的命名属性。它还包括映射基础对象的功能。 也可以看看 This post