我已经构建了一个WCF服务库,我添加了对少数第三方dll的引用。这是我的界面
[ServiceContract]
public interface IService1
{
[OperationContract]
3rdpartyreturntype GetObj(System.Windows.Controls.Control txtcontrol);
}
// Use a data contract as illustrated in the sample below to add composite types to service operations
[DataContract]
public class nclass
{
[DataMember]
public System.Windows.Controls.Control txtcontrol
{
get { return txtcontrol; }
set { txtcontrol = value; }
}
[DataMember]
public 3rdpartyreturntype nobj
{
get { return vuiobj; }
set { vuiobj = value; }
}
[DataMember]
public System.Windows.Input.TouchDevice tchdev
{
get { return tchdev; }
set { tchdev = value; }
}
}
我已经实现了上面的界面。当我运行该服务时,我得到以下错误,任何人都可以帮助我吗?
类型'System.Windows.Input.TouchDevice'无法序列化。考虑 使用DataContractAttribute属性标记它,并标记所有 要使用DataMemberAttribute序列化的成员数 属性。
答案 0 :(得分:0)
如果你想要像类一样复杂的类型被序列化,你必须将每个成员声明为数据成员,并将类声明为datacontract。
在这种情况下,触摸设备是复杂类型(类),因此您需要将其所有成员标记为datamembers,将类标记为datacontract。
但是我可以从类型中看到它属于system.windows.input,这个类可能没有被序列化。因此,您不能将其用作数据成员。
如果您只使用属于touchDevice类的一组成员,则可以创建自己的类,该类仅映射可以序列化的一组touch设备成员。并使用datacontract和datamember属性装饰这个新类。
答案 1 :(得分:0)
“System.Windows.Input.TouchDevice”类型本身似乎没有标记为可序列化或DataContract。
您可以直接传递您关注的属性,而不是像这样直接传递TouchDevice和Control。我猜测TextControl你只关心Text值。对于TouchDevice,可能是源和目标控件名称?