C#-如何从静态对象创建动态对象?

C#-如何从静态对象创建动态对象?,c#,clone,dynamictype,C#,Clone,Dynamictype,假设有一个类型为a的静态对象 A类 { 公共字符串b; 公共INTC; 公共福利; 公共A e; . . . } A=新的A(){ b=“字符串”, c=12, d=真 e=新的A(){ b=“另一个字符串”, c=23 } }; 我想deep将此对象克隆到具有其所有属性的动态对象中。我将枚举对象的属性(a.GetType().GetProperties()),在内置类型、结构和类之间取消语言转换,并用于构建动态对象。构建副本构造函数: class A //<-- this clas

假设有一个类型为
a
的静态对象

A类
{
公共字符串b;
公共INTC;
公共福利;
公共A e;
.
.
.
}
A=新的A(){
b=“字符串”,
c=12,
d=真
e=新的A(){
b=“另一个字符串”,
c=23
}
};

我想deep将此对象克隆到具有其所有属性的
动态对象中。

我将枚举对象的属性(a.GetType().GetProperties()),在内置类型、结构和类之间取消语言转换,并用于构建动态对象。

构建副本构造函数:

class A   //<-- this class is static?????
{
  public string b;
  public int c;
  public bool d;
  public A e;

  public A() { }  // add default constructor

  public A(A a){
     b = a.b;
     c = a.c;
     d = a.d;
     if ( a.e != null ) {
        e = new A(a.e);
     }
  }
}

class A/最简单的方法是将类序列化为json并反序列化为动态对象

使用Json.net:

        A a = new A()
        {
            b = "string",
            c = 12,
            d = true,
            e = new A()
            {
                b = "another string",
                c = 23
            }
        };

        var json = JsonConvert.SerializeObject(a); // create a json 
        dynamic newObj = JsonConvert.DeserializeObject(json);// create a dynamic object
在C#4.0中,我们有动态的概念,但是如何从静态对象创建动态对象呢

下面的代码将在运行时生成异常。动态对象来自C#类,但它可以是通过动态语言运行库(DLR)来自其他语言的对象。问题不在于如何调用静态方法,而在于如何调用在C#代码中无法创建的动态对象的静态方法

福班 { 公共静态整数和(整数x,整数y) { 返回x+y; } }

班级计划 {

}

动态类型是C#和其他编程语言之间的桥梁。还有一些其他语言(如Java)允许通过对象而不是类型调用静态方法

欲了解更多详情,请访问

让我直说吧。你是说
a
是其他类的静态属性或成员变量吗?如果是这样,请在类
a
中编写一个clone方法,该方法返回类型为
a
的深度克隆,并将其分配给要分配给的任何对象。属性或成员变量上的修饰符
static
意味着属性/成员变量属于类,而不是类的实例。除此之外,该属性/成员变量引用的对象只是一个对象。是否有任何非字符串引用属性?如果是,您希望如何处理它们?创建它们指向的对象的副本,或指向静态属性所指向的同一实例?是否有任何库可以这样做?我的问题是,我有一个复杂的模型,它有多个视图。我想从模型中构建动态视图,然后使用JSON.net将它们序列化为JSON。Json.net有自定义序列化的机制,但在不同的场景中,从单个模型构建多种类型的序列化不是直截了当的。在不同的场景中,我必须序列化复杂对象的某些部分,而不是整个对象。序列化整个对象非常繁重,有时需要几分钟。我的问题是我有一个复杂的模型,它有多个视图。我想从模型中构建动态视图,然后使用JSON.net将它们序列化为JSON。Json.net具有自定义序列化的机制,但在不同的场景中从单个模型构建多种类型的序列化并不是直接的。序列化过程是递归的,可以处理复杂类型。您将遇到诸如字典之类的类型问题,需要显式地实现一个接口来告诉序列化程序如何处理它。我认为“复杂”对象没有任何无法解决的问题(如果没有循环引用的话)。复杂类型没有问题。问题在于同一模型的多个视图。在不同的场景中,我必须序列化复杂对象的某些部分,而不是整个对象。序列化整个对象非常繁重,有时需要几分钟。
static void Main(string[] args)
{
    dynamic d = new Foo();
    Console.WriteLine(d.Sum(1, 3));

}