我有一个在返回对象的MVC4应用程序中使用的WCF Web服务。我想在加载后向对象添加另一个属性。基本上我想要一个对象的克隆加上我的新属性。
我该怎么做?
最好反序列化为JSON,然后添加新属性,然后使用extra属性将其序列化为我的新对象,还是有其他方法可以做到?
答案 0 :(得分:4)
如果你想保持简单 ,你可以简单地创建你的新类型,包括给定对象的所有属性和你想要的新属性,然后填写你的新类和做你想做的事。
另请考虑阅读笔记部分。
对于复杂案例和大型应用 ,您可以考虑像abatishchev mentioned in his answer这样的解决方案。
class Foo
{
public int Id { get; set; }
public string Name { get; set; }
}
class FooViewModel
{
public FooViewModel()
{
}
public FooViewModel(Foo foo)
{
this.Id= foo.Id;
this.Name= foo.Name;
}
public int Id { get; set; }
public string Name { get; set; }
public string NewProperty{ get; set; }
}
并以这种方式使用它:
var foo = Service.GetFoo();
var fooViewModel= new FooViewModel(foo);
fooViewModel.NewProperty = "new value";
注意:强>
Foo
中使用FooViewModel
实例,并且所有getter和setter都会对该实例执行操作以保持事物同步。 Foo
的继承来增强解决方案,这样您也不需要再次创建每个属性。答案 1 :(得分:3)
我认为你要找的是AutoMapper。您可以将一个对象映射到另一个对象比如说,你有一个具有X属性的DTO实体。然后,您有一个具有相同X属性+ Y附加的业务逻辑实体。 AutoMapper将处理它easily。
class OrderDto
{
public int OrderId { get; set; }
}
class OrderViewModel
{
public int OrderId { get; set; }
public int DisplayOrder { get; set; }
}
映射:
var dto = new OrderDto { OrderId = 2 };
var vm = mapper.Map<OrderViewModel>(dto);
vm.DisplayOrder = 3;
答案 2 :(得分:0)
最好是反序列化为JSON,然后添加新属性和 然后用额外的属性将其序列化为我的新对象或者是 有另一种方法吗?
使用JSON肯定会更容易,成本更低。
但是如果你想要更多地控制生成过程,请参阅that回答如何动态生成类。