向.net对象添加新属性

本文关键字:属性 新属性 net 对象 添加 | 更新日期: 2023-09-27 18:14:36

我有一个在返回一个对象的MVC4应用程序中使用的WCF web服务。我想在对象加载后添加另一个属性。实际上,我想要一个对象的克隆加上我的新属性。

我该怎么做呢?

最好是反序列化到JSON,然后添加新的属性,然后序列化到我的新对象与额外的属性,或者有另一种方法来做到这一点?

向.net对象添加新属性

如果你想让事情保持简单 ,你可以简单地创建你的新类型,包括给定对象的所有属性和你想要的新属性,然后填充你的新类,做你想做的。

还可以考虑阅读笔记部分。

对于复杂的情况和大型应用 ,您可以考虑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肯定会更容易,更省力。

但是如果您想要对生成过程有更多的控制,请参阅如何动态生成类的答案