我有像这样的xml
我想解析xml,使用spscified属性构建一个动态类。我发现了一些使用system.reflection.emit命名空间的指针,但是我总是要创建一个程序集和模块来定义类型?我可以创建一个类型并定义属性吗?
<Root>
<type>
<name>mytype</name>
<properties>
<property>
<name>property1</name>
<value>2</value>
<datatype>int</datatype>
</property>
<property>
<name>property3</name>
<value>2.5</value>
<datatype>double</datatype>
</property>
<property>
<name>property4</name>
<value>hello world</value>
<datatype>string</datatype>
</property>
</properties>
</type>
</Root>
答案 0 :(得分:0)
类型必须始终存在于程序集中 - 因此您必须在内存中创建程序集。您可能会发现使用CodeDom模型定义类型会更容易一些。
答案 1 :(得分:0)
This example显示创建一个AssemblyBuilder,然后创建一个ModuleBuilder,然后创建TypeBuilder。从那里你必须定义属性。你必须创建具有返回和方法的方法。与get和set访问器匹配的参数。该示例显示了使用字段进行存储的标准get / set操作的基本实现。如果你需要更多,那么你将不得不学习CIL来启动。
完成所有操作后,如果您希望将其保存以备将来使用,请调用TypeBuilder.CreateType和可能的AssemblyBuilder.Save。
至于你对创建程序集的担忧。定义动态组件并不是那么重要。模块。这只是几行。