从 Xml 创建类型
我有一个像这样的 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>
i have a xml like this
I want to parse the xml, build a dynamic class with spscified properties. i found some pointers to do it with system.reflection.emit namespace, but i do i always have to create an assembly and module in order to define the type? can i just create a type and define the properties?
<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>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
类型必须始终存在于程序集中 - 因此您必须在内存中创建程序集。 您可能会发现使用 CodeDom 模型来定义类型更容易一些。
A type must always exist in an Assembly - so you'll have to create the assembly in memory. You might find it a bit easier to use the CodeDom model to define the types.
此示例显示创建一个 AssemblyBuilder,然后创建一个ModuleBuilder 然后是 TypeBuilder。 从那里您必须定义属性。 您必须创建具有 return & 的方法。 与 get 和 set 访问器匹配的参数。 该示例显示了使用字段进行存储的标准获取/设置操作的基本实现。 如果您需要更多,那么您必须学习 CIL 才能启动。
全部完成后,如果您希望保存以供将来使用,请调用 TypeBuilder.CreateType 和 AssemblyBuilder.Save。
至于您对创建程序集的担忧。 定义动态程序集和动态程序集并不是什么大不了的事。 模块。 只需几行即可做到这一点。
This example shows creating an AssemblyBuilder then a ModuleBuilder then the TypeBuilder. From there you have to define properties. You have to create methods that have return & parameters that match the get and set accessors. The example shows a basic implementation of standard get/set operations that use a field for storage. If you need more then you'll have to learn CIL to boot.
When all done call TypeBuilder.CreateType and possibly AssemblyBuilder.Save if you wish to save it for future use.
As for your apprehension about creating an assembly. It's not that big of a deal to define a dynamic assembly & module. It's only a few lines to do that.