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
感谢
尝试使用[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操作方法。