Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用dynamic关键字向C#中的对象添加后期绑定信息?_C#_Dynamic_C# 4.0 - Fatal编程技术网

使用dynamic关键字向C#中的对象添加后期绑定信息?

使用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

我有一个对象,在将其序列化为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;
然而,在程序的后期,我经常想添加一两个属性。这通常发生在我的控制器中,就在将其转换为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!";
您不仅可以添加新属性,还可以添加新方法和新事件