WCF使用<t> </t>传递类

时间:2012-01-04 22:02:34

标签: c# .net wcf

我有一个数据提取, 类似的东西:

public class MyClass<T>() where T : MyBaseClass
{
   public   List<T> MyList { get; set;}
}

public class SubClassOne : MyBaseClass
{
}
public class SubClassOne : MyBaseClass
{
}

在客户端我得到了一些谎言

MyClass<SubClassOne> FirstClass = new MyClassOfSubClassOneHXlyzk1V()

对于其他子类,我如何在WCF中传输这个类,这样我就可以在没有OfTHXlyzk1V部分的情况下获得MyClass

由于

2 个答案:

答案 0 :(得分:1)

尝试使用[KnownType]声明要用于

的类型

http://msdn.microsoft.com/en-us/library/ms730167.aspx

滚动到 - “使用开放通用方法的已知类型”

答案 1 :(得分:0)

这只是WCF如何为泛型生成类名以防止类名冲突的函数。有关具体详情,请参阅the MSDN documentation

您有两种方法可以解决这个问题:

1)修改MyClass以在客户端中指定所需的名称:

[DataContract(Name = "MyClass{0}")]
public class MyClass<T> where T : MyBaseClass

假设返回值为MyClass<SubClassOne>,则会生成MyClassSubClassOne的客户名称。

2)将所有共享类(WCF服务和客户端中使用的类)移动到可以包含在每个应用程序中的项目中(主要用于命名空间解析)。

然后在WCF客户端中,右键单击服务引用并选择Configure Service Reference...并确保选中Reuse types in all referenced assemblies

这是一篇非常简短的MSDN how-to