不同的接口实现以下情况:如何反序列化与WCF
我们的软件与业务对象,在它们与WCF发送从服务器到客户端的时刻。
[Serializable]
public class SomeValueBO
{
public DateTime Timestamp{ get; set; }
}
它们被打包在请求/响应消息中。
[DataContract]
public class Response
{
[DataMember]
public List<SomeValueBO> Values { get; set; }
}
问题:
我们想DTO的发送到客户端,而不是业务对象的。我听说,可以在客户端检索与在服务器上发送的不同类型的实例。
例子:
public interface ISomeValue
{
DateTime Timestamp { get; set; }
}
[Serializable]
public class SomeValueBO : ISomeValue
{
public DateTime Timestamp { get; set; }
}
[DataContract]
public class SomeValueDTO : ISomeValue
{
[DataMember]
public DateTime Timestamp { get; set; }
}
的回应是这样的:
[DataContract]
public class Response
{
[DataMember]
public List<ISomeValue> Values { get; set; }
}
在服务器上:
public class ServiceClass : IService
{
public Response HandleRequest(Request request)
{
Response response = new Response();
response.Values.Add(new SomeValueBO());
return response;
}
}
上的客户端:
Response response = serviceProxy.HandleRequest(request);
ISomeValue value = response.Values[0];
value is SomeValueDTO
我试过只声明DTO对象的已知类型和Data Contract Equivalence,但WCF仍然保持反序列化项目作为BO实例。
我要补充,这两种方式都上班,送BO和检索它作为一个BO和发送BO和检索DTO,但当然有不同的要求。
所以我的问题是,这是可能的,如果是,我究竟做错了什么?
感谢您的帮助, Enyra
编辑: 我也发现了,我们使用的是NetDataSerializer,算得上是它不工作的问题?
什么是您使用的邮件协议?是否有一个原因,你不是简单地从服务器发送dto?从长远来看,这(你试图做的)可能是一个维护噩梦。 – 2011-02-18 08:01:11
是的,有一个原因,我们加载值> 10'000,如果我们复制它们,它会变得很慢,所以我们会用这个技巧来转换它。 – Enyra 2011-02-18 10:49:07