运行WCF服务库时出错

运行WCF服务库时出错,wcf,serialization,service,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

我建立了一个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序列化其成员的 属性


如果您想序列化类这样的复杂类型,则必须将其每个成员声明为数据成员,将类声明为datacontract

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

但正如我从类型中看到的,它属于system.windows.input,该类可能未序列化。因此,不能将其用作数据成员


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

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


与其像那样直接传递触摸设备和控件,也许你可以传递你关心的属性。我猜在文本控件的情况下,您只关心文本值。对于TouchDevice,可能是源控件和目标控件的名称

您能为所有第三方ReturnType编写包装器吗?如果是这样,那么可以用
[DataMember]
属性来标记它们。GetObj方法是第三方方法,它们需要的参数是System.Windows.Controls.Control,因此我无法更改它。此外,我添加触摸设备只是因为我在错误中得到了它,我没有在任何地方使用它(也许第三部分dll正在使用它,我不确定)。我还使用了reflector,并查看了第三方类“3rdpartyreturntype”,如果我可以将其成员映射到我自己的类中并序列化该类的话。但据我所见,它的一个属性是服务。我必须映射所有属性吗?如何映射服务?GetObj方法是第三方方法,他们需要的参数是System.Windows.Controls.Control,因此我无法更改该参数。此外,我添加触摸设备只是因为我在错误中得到了它,我没有在任何地方使用它(也许第三部分dll正在使用它,我不确定)。我还使用了reflector,并查看了第三方类“3rdpartyreturntype”,如果我可以将其成员映射到我自己的类中并序列化该类的话。但据我所见,它的一个属性是服务。我必须映射所有属性吗?如何映射服务?