将新属性添加到.Net对象

时间:2015-09-25 18:12:29

标签: c# wcf asp.net-mvc-4

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

我该怎么做?

最好反序列化为JSON,然后添加新属性,然后使用extra属性将其序列化为我的新对象,还是有其他方法可以做到?

3 个答案:

答案 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的继承来增强解决方案,这样您也不需要再次创建每个属性。
  • 对于复杂的案例和大型应用程序,您可以考虑像abatishchev mentioned in his answer
  • 这样的解决方案

答案 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回答如何动态生成类。