如何从反射中获得anonyme类的实例?

时间:2012-10-30 16:08:58

标签: c# reflection

如何从反射中获得anonyme类的实例?

我有这个字符串:
 "<object name='hello' id='654' />"

不确定的属性参数编号(和名称) 从这里我想有一个anonyme类的实例,它具有属性和属性之间的映射,以及属性值和属性值。

var anObject = new{name="hello",id=654};

我把字符串的xml格式用来说明我的话,但我需要一个解决方案来自任何字符串格式(我不想要Xml序列化)。

对于Reed Copsey(请抽象我需要它的上下文)。 我打算用它来将DefaultRoute注入asp.net MVC 3应用程序的地图路径

 routes.MapRoute(
        "",
        "superweirdurlwithnostructure.whatever",
        new { controller = "Home", action = "Products", id = 500 }
    );

参考我的问题File to define route in MVC3

2 个答案:

答案 0 :(得分:2)

你不能以这种方式创建一个匿名类(至少没有使用类似CodeDom之类的东西来实际编写和编译代码)。

话虽这么说,即使你可以这样做,也没有好办法使用这个课程。匿名类型实际上是在定义它们的函数中使用,它们被转换为完整的类,由编译器在编译时生成。

可能的一个选择是使用dynamic

dynamic anObject = new ExpandoObject();
anObject.name = "hello";
anObject.id = 654;

您也可以通过ExpandoObject的{​​{1}}界面使用此功能:

IDictionary<string,object>

然而,你仍然需要一个好的方法来使用它 - 不知道代码应该如何访问变量,动态构建类型无助于解决许多问题,只是创建了更多... < / p>

答案 1 :(得分:0)

不幸的是,您必须使用Reflection.Emit创建包含所有属性的新类型。匿名类型实际上是与其他任何类型没有区别的类,除了编译器自动创建它们的定义。

根据您的情况,dynamic ExpandoObject个对象可能就是您的答案。