Web services 在WCF中反序列化自定义元组时出错

Web services 在WCF中反序列化自定义元组时出错,web-services,wcf,silverlight,serialization,deserialization,Web Services,Wcf,Silverlight,Serialization,Deserialization,在WCF函数中反序列化结果集(元组)时出现以下错误 尝试反序列化参数XXX时出错。有关更多详细信息,请参阅InnerException 无法序列化“System.Tuple”。考虑使用DATACONTractAttor属性对其进行标记,并标记要使用DATAMEMBAREATE属性序列化的所有成员。或者,您可以确保该类型是公共的,并且具有无参数构造函数-然后将序列化该类型的所有公共成员,并且不需要任何属性 下面是元组定义 公共类XXX 公共财产aaa作为新列表(元组(bbb、ccc)) 结束类不

在WCF函数中反序列化结果集(元组)时出现以下错误

尝试反序列化参数XXX时出错。有关更多详细信息,请参阅InnerException

无法序列化“System.Tuple”。考虑使用DATACONTractAttor属性对其进行标记,并标记要使用DATAMEMBAREATE属性序列化的所有成员。或者,您可以确保该类型是公共的,并且具有无参数构造函数-然后将序列化该类型的所有公共成员,并且不需要任何属性

下面是元组定义

公共类XXX 公共财产aaa作为新列表(元组(bbb、ccc))
结束类

不合时宜,您需要创建一个类,而不是使用元组。例外情况是不能使用元组,因为a)它没有标记
DataContract
属性,B)它没有无参数构造函数。因此,
Tuple
不能设置为
newtuple()

如果你通过WCF发送的类是这样的

public class MyClassToSendThroughWcf
{
    public tuple<int,string> MyData {get;set;} //The tuple here is problem, replace with the class below...
}
public class MyClassToUseWithWcf
{
    public MyClassToUseWithWcf(){}

    public MyClassToUseWithWcf(int i, string s)
    {
        Item1 = i;
        Item2 = s;
    }

    public int Item1 {get;set;}
    public string Item2 {get;set;}
}

现在,两个类都有默认构造函数,因此可以序列化。无论如何,我建议避免使用元组。

内部异常说明了什么,这并没有提供足够的信息。您可以发布反序列化代码吗?公共函数EndXXX(ByVal result为System.IAsyncResult),因为XXX将EndXXX Dim参数((0)-1)实现为Object Dim,结果为XXX=CType(MyBase.EndInvoke(“XXX”),_args,result),XXX)Return _resultend function我确实为类使用了DataContract属性。您可能已将该属性添加到包含tupel的类中,但我认为您无法将该属性添加到tupel结构本身。我在这个答案中展示的类是将与WCF一起工作的tupel的替换。我在我的答案中添加了一些说明。