【发布时间】:2015-02-13 07:08:17
【问题描述】:
我有一个继承自 ResponseDTO 的对象 AddressDTO。
[DataContract]
public class ResponseDTO
{
[DataMember]
public string ID {get; set;}
}
[DataContract]
public class AddressDTO : ResponseDTO
{
[DataMember]
public List<Address> Elements {get; set;}
}
我想要一种通用 Web 服务,它接收 RequestDTO 作为输入参数并创建(取决于 RequestDTO 中的 RequestType)AddressDTO 或 ResponseDTO。
public ResponseDTO GetDataFromWebService(RequestDTO request)
{
...
ResponseDTO response = null;
switch(request.Request)
{
case RequestType.Case1:
response = new AddressDTO();
break;
case RequestType.Case2:
default:
response = new ResponseDTO();
break;
}
...
return response;
}
在客户端,当尝试使用此 Web 服务时,即使我通过网络发送了 AddressDTO(案例 1),我也会收到一个对象 ResponseDTO。我无法转换为 AddressDTO,因为 AddressDTO 在客户端(通过 WSDL 定义)中不作为对象已知,因此具有 Address 对象列表的属性 Elements 被隐藏(或不导出/传输)给客户端。
这不可能以我尝试过的方式处理 Web 服务上的继承,还是我必须以某种方式为 WSDL 声明继承,以便客户端能够重建继承的结构,以便我可以转换 ResponseDTO在一天结束时发送到 AddressDTO?
非常感谢您提前提供的答案/想法。
【问题讨论】:
-
WCF 'KnownType' 会有所帮助
标签: c# web-services wcf inheritance wsdl