首页 文章

运行时将DataContract和DataMember添加到使用.Net Reflection创建的动态类

提问于
浏览
3

我使用.Net Reflection.Emit来创建动态类及其字段 . 现在,当我在启用Silverlight的WCF服务中使用此动态类对象的通用列表时,它在参考端给出了一个错误 . 服务引用不知道此动态创建的类型 . 这是我能想到的 . 我不确定吗?有没有人知道如何使用DataContract及其带有DataMember的字段来装饰这个动态创建的类?

2 回答

  • 0

    即使您将 DataContractDataMember 属性添加到在运行时使用Reflection.Emit创建的类, Contract cannot 也可以包含在服务元数据中并由客户端发现,只需添加这些属性,因为创建服务元数据步骤是通过检查完成的 Contract 参数和返回值,并在服务有机会运行之前创建服务描述 .

    一个简单的选择是在服务操作中使用弱类型参数,例如XElementMessage class

    IE:

    void SomeOperation(XElement parameter);
    void SomeOtherOperation(Message message);
    

    一个不太简单的选项是通过实现IWsdlExportExtension导出自定义元数据,使用自定义元数据行为并为动态生成的类导出元数据 . 这可以假设在任何对服务的调用之前生成类,并且在每次应用程序运行时生成相同的类结构(因此可能不是一个合适的选择)

  • 2

    您可能希望使用基于空DataMemberAttribute构造函数的CustomAttributeBuilder调用PropertyBuilder.SetCustomAttribute . 类型为TypeBuilder的东西 .

相关问题