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));
}