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

问题描述 投票:4回答:2

我使用过.Net反射。发出创建动态类及其字段的信息。现在,当我在启用了Silverlight的WCF服务中使用此动态类对象的“通用列表”时,在参考端给我一个错误。服务参考不知道此动态创建的类型。这是我能想到的。我不确定吗?是否有人知道如何使用DataContract装饰这个动态创建的类以及如何使用DataMember装饰它的字段?

.net wcf reflection silverlight-4.0 datacontract
2个回答
2
投票

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

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

IE:

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

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


0
投票

您可能希望基于空的DataMemberAttribute构造函数使用CustomAttributeBuilder调用PropertyBuilder.SetCustomAttribute。与TypeBuilder类似。

© www.soinside.com 2019 - 2024. All rights reserved.