WCF传递带有<;T>;

本文关键字:lt gt WCF | 更新日期: 2023-09-27 18:19:39

我得到了一个数据合约,类似于:

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

感谢

WCF传递带有<;T>;

尝试使用[NowType]声明要用于的类型

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

滚动至"使用开放通用方法的已知类型"

这只是WCF如何为泛型生成类名以防止类名冲突的一个函数。有关具体详细信息,请参阅MSDN文档。

您有两种解决方案:

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操作方法。