运行WCF服务库时出错

时间:2011-08-05 18:34:50

标签: wcf serialization service

我已经构建了一个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序列化的成员数   属性。

2 个答案:

答案 0 :(得分:0)

如果你想要像类一样复杂的类型被序列化,你必须将每个成员声明为数据成员,并将类声明为datacontract。

在这种情况下,触摸设备是复杂类型(类),因此您需要将其所有成员标记为datamembers,将类标记为datacontract。

但是我可以从类型中看到它属于system.windows.input,这个类可能没有被序列化。因此,您不能将其用作数据成员。

如果您只使用属于touchDevice类的一组成员,则可以创建自己的类,该类仅映射可以序列化的一组touch设备成员。并使用datacontract和datamember属性装饰这个新类。

答案 1 :(得分:0)

“System.Windows.Input.TouchDevice”类型本身似乎没有标记为可序列化或DataContract。

您可以直接传递您关注的属性,而不是像这样直接传递TouchDevice和Control。我猜测TextControl你只关心Text值。对于TouchDevice,可能是源和目标控件名称?