我希望将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类是第三方生成的
答案 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/