使用dynamic关键字向C#中的对象添加后期绑定信息?
我有一个对象,在将其序列化为Json之前,我想向其添加一个属性。因此,我的对象将如下所示:使用dynamic关键字向C#中的对象添加后期绑定信息?,c#,dynamic,c#-4.0,C#,Dynamic,C# 4.0,我有一个对象,在将其序列化为Json之前,我想向其添加一个属性。因此,我的对象将如下所示: public class MySpecialObject { public int Id { get; set; } public string OneProperty { get; set; } public string ASecondProperty { get; set; } } ///Retrieve object from d
public class MySpecialObject {
public int Id { get; set; }
public string OneProperty { get; set; }
public string ASecondProperty { get; set; }
}
///Retrieve object from database
var MySpecialObject = specialObjectRepository.Get(id);
MySpecialObject.["DynamicProperty"] = "Dynamic Property!";
///Pretend I do Json serialization here
return MySpecialObject;
然而,在程序的后期,我经常想添加一两个属性。这通常发生在我的控制器中,就在将其转换为Json之前。我想这样做:
public class MySpecialObject {
public int Id { get; set; }
public string OneProperty { get; set; }
public string ASecondProperty { get; set; }
}
///Retrieve object from database
var MySpecialObject = specialObjectRepository.Get(id);
MySpecialObject.["DynamicProperty"] = "Dynamic Property!";
///Pretend I do Json serialization here
return MySpecialObject;
这显然是编造的,但我希望我想做的是清楚的。在Javascript中,这很容易做到,因为它是松散类型的。我认为在C#4.0中使用dynamic关键字是可能的,但看起来这不是它的目的(尽管我可能完全忽略了显而易见的东西)。我想我可以为这类情况创建一个类,但只在一行中创建会更容易。我知道这听起来很懒,但我觉得我尝试做的应该是可能的。您想从中继承。它为动态对象实现了所有必要的羽化 您必须使用新的ExpandooObject类:
public class MySpecialObject:ExpandoObject {
public int Id { get; set; }
public string OneProperty { get; set; }
public string ASecondProperty { get; set; }
}
在序列化之前,只需编写:
var MySpecialObject = specialObjectRepository.Get(id);
MySpecialObject.DynamicProperty = "Dynamic Property!";
您不仅可以添加新属性,还可以添加新方法和新事件