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

运行时将DataContract和DataMember添加到使用.Net反射创建的动态类中,.net,wcf,reflection,silverlight-4.0,datacontract,.net,Wcf,Reflection,Silverlight 4.0,Datacontract,我使用了.Net反射。发射以创建动态类及其字段。现在,当我在支持Silverlight的WCF服务中使用这个动态类对象的通用列表时,它在引用端给了我一个错误。服务引用不知道此动态创建的类型。这就是我能想到的。我对此不确定?有人知道如何使用DataContract及其“带有DataMember的字段”装饰这个动态创建的类吗?您可能希望使用基于空DataMemberAttribute构造函数的CustomAttributeBuilder调用PropertyBuilder.SetCustomAttri

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

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

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

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

即:


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

我认为您是对的。但是我对代码做了一些修改,使其更简单,并避免了这种复杂的编程。谢谢你的建议。
void SomeOperation(XElement parameter);
void SomeOtherOperation(Message message);