C# 通过WCF发送元组对象?

C# 通过WCF发送元组对象?,c#,.net,wcf,serialization,datamember,C#,.net,Wcf,Serialization,Datamember,WCF的数据协定序列化程序是否支持System.Tuple类(即,我是否可以将Tuple对象传递给WCF调用和/或接收它们作为结果的一部分或全部) 我找到了,但不是我所希望的清晰、明确的“您可以使用WCF发送和接收元组”答案 我猜您可以,只要元组本身中的所有类型都由数据契约序列化程序支持——有人能给我提供一个更明确的答案吗?谢谢。元组的类型标记为SerializableAttribute,因此,如果存储在其中的类型是可序列化的,则它们也应该能够由WCF序列化 查看:链接等,上面写着: [Seri

WCF的数据协定序列化程序是否支持
System.Tuple
类(即,我是否可以将
Tuple
对象传递给WCF调用和/或接收它们作为结果的一部分或全部)

我找到了,但不是我所希望的清晰、明确的“您可以使用WCF发送和接收元组”答案


我猜您可以,只要
元组
本身中的所有类型都由数据契约序列化程序支持——有人能给我提供一个更明确的答案吗?谢谢。

元组的
类型标记为
SerializableAttribute
,因此,如果存储在其中的类型是可序列化的,则它们也应该能够由WCF序列化

查看:链接等,上面写着:

[SerializableAttribute]
public class Tuple<T1> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
[SerializableAttribute]
公共类元组:IsstructuralEquatable、IsstructuralComparable、IComparable、ITuple
请注意,链接的文档包含以下行:

部分信任环境中不支持[Serializable]/ISerializable编程模型

因此,这可能不像看上去那么容易


(顺便说一句,也值得一看。)

我自己也在深入研究这个问题,如果您通过Silverlight使用WCF服务,可能会出现一个问题:请参阅了解更多信息


Silverlight版本的元组没有Serializable属性,这目前是一个问题。

我的元组可以很好地与.NET 4.0和WCF配合使用(提醒:您需要.NET 4.0来支持元组)

下面是单元测试方法(通过WCF层调用该方法):

//
///测试元组
/// 
[TestMethod()]
public void WcfTestTupleUnit()
{
元组x;
x=CallViaWCF.testTuple();
断言.AreEqual(x.Item1,42);
断言.AreEqual(x.Item2,43);
}
#端区
以下是界面:

[OperationContract]
Tuple<double, double> testTuple();
[运营合同]
Tuple testTuple();
以下是实施方案:

public Tuple<double, double> testTuple()
{
  return new Tuple<double, double>(42, 43);
}
公共元组testTuple()
{
返回新的元组(42,43);
}
我只是通过使用“WCF服务应用程序”(参见New..Project)进行调试来测试它,该应用程序为WCF服务提供服务。我使用这种方法进行调试,因为我可以使用调试器无缝地从WCF客户机进入WCF服务,然后再返回,这有时非常有用


我还通过将其部署到控制台应用程序和服务应用程序来测试此方法,因此它肯定对我有效。

只要元组中的类型是基本类型,而不是自定义类型,元组就可以在WCF中正常工作。如果是这样,那么它将导致对客户端的循环依赖,因为客户端将不是元组,而是元组。我现在对此有意见了。在web服务中使用泛型似乎不是一个好主意。
public Tuple<double, double> testTuple()
{
  return new Tuple<double, double>(42, 43);
}