第三方COM对象无法序列化。即使被包装为DataMember

时间:2012-04-26 20:53:48

标签: c# wcf com

我希望将COM对象传递到我的WCF服务器,但无论我尝试什么,我都会遇到以下错误:

  

类型'System .__ ComObject'无法序列化。考虑标记它   使用DataContractAttribute属性,并标记其所有内容   要使用DataMemberAttribute属性序列化的成员。   有关其他支持,请参阅Microsoft .NET Framework文档   类型。

我试过了ServiceKnownType

[ServiceKnownType(typeof(ComClass))]

我试过把它包起来

[DataContract]
public class receivedClass
{
  [DataMember]
  public ComClass controlClass { get; set; }
}

是否可以将其序列化以便将其发送到我的WCF? (我将其用于IPC计划)

哦,这是COM类是第三方生成的

2 个答案:

答案 0 :(得分:3)

COM对象基本上只是指向未管理内存的指针。它不能被.NET无意中序列化。但是,可以序列化对象的状态,在WCF服务上构造COM对象的新对象实例,然后还原状态。表示自治信息的com对象的属性可以序列化并传递给服务器。但是,如果对象是任何未管理对象(句柄,内存指针等)的包装器,则可能很难保存COM对象的状态。

答案 1 :(得分:0)

为什么不尝试使用Microsoft DLR中提供的动态类型和COM绑定器。我认为这可以解决问题。 这是一个很好的帖子,你可能会觉得有用。 http://loosexaml.wordpress.com/2011/01/01/wcf-serialization-of-dlr-dynamic-types/