向.net对象添加新属性
本文关键字:属性 新属性 net 对象 添加 | 更新日期: 2023-09-27 18:14:36
我有一个在返回一个对象的MVC4应用程序中使用的WCF web服务。我想在对象加载后添加另一个属性。实际上,我想要一个对象的克隆加上我的新属性。
我该怎么做呢?
最好是反序列化到JSON,然后添加新的属性,然后序列化到我的新对象与额外的属性,或者有另一种方法来做到这一点?
如果你想让事情保持简单 ,你可以简单地创建你的新类型,包括给定对象的所有属性和你想要的新属性,然后填充你的新类,做你想做的。
还可以考虑阅读笔记部分。
对于复杂的情况和大型应用 ,您可以考虑abatishchev在他的回答中提到的解决方案。
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";
注意:
- 您可以在
FooViewModel
中使用Foo
实例,并且所有getter和setter都作用于该实例以保持同步。 - 有时您可以使用
Foo
的继承来增强解决方案,这样您就不需要再次创建每个属性。 - 对于复杂的情况和大型应用程序,您可以考虑abatishchev在他的回答中提到的解决方案。
我想你要找的是AutoMapper。你可以把一个对象映射到另一个对象。假设您有一个具有X属性的DTO实体。然后,您就有了一个具有相同X属性+ Y附加属性的业务逻辑实体。AutoMapper将轻松处理它。
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;
最好是反序列化到JSON,然后添加新的属性和然后用额外的属性or is序列化它到我的新对象中还有别的方法吗?
使用JSON肯定会更容易,更省力。
但是如果您想要对生成过程有更多的控制,请参阅如何动态生成类的答案