通过WCF服务序列化通用类型

Jav*_*per 8 c# wcf

我有一个C#类定义如下:

public class GenericItem<T>
{
  public List<T> Items { get; set; }

  public DateTime TimeStamp { get; set; }
} 
Run Code Online (Sandbox Code Playgroud)

我在我的服务器上创建了这个类的实例.然后我尝试通过WCF服务传递它,如下所示:

[OperationContract]
public GenericItem<MyCustomType> GetResult()
{
  GenericItem<MyCustomType> result = BuildGenericItem();
  return result;
}
Run Code Online (Sandbox Code Playgroud)

在这一点上,一切都很好.当我在Silverlight应用程序中"更新服务引用"重新编译时,我收到编译时错误,类似于以下内容:

MyNamespace.GenericItemOfMyCustomType [extra chars]不包含'GetEnumerator'的公共定义

我不知道为什么:

  1. 额外的字符出现了.每次更新服务引用时似乎都会改变.
  2. 如何实际解决这个问题.

我究竟做错了什么?

ldg*_*man 10

Sleiman是正确的,但是可以使用本文所述的Bounded Generics ,你可以实现你想要的.这允许您在服务中创建泛型类型并公开它.但是,消费者不会将其视为通用,因为在服务操作中指定了类型.


Sle*_*idi 6

您无法定义依赖于泛型类型参数的WCF合同.泛型特定于.NET,使用它们会违反WCF的面向服务的特性.但是,数据协定可以包含集合作为数据成员,因为WCF为集合提供专用的编组规则.