因此,我创建了几个 WCF 服务。每个返回列表的某种类型的数据合约。但是,这些数据合约具有其他数据合约的列表属性。我正在尝试实现数据合同集合的延迟加载。
我的想法是在客户端实现一个类,该类继承自数据协定并重写集合属性,以便 setter 和 getter 方法调用服务并获取实际的集合项。
我的问题是:如何使基本通道返回实现数据契约的类而不是实际的数据契约?如何控制基本通道返回的内容?
我的服务客户端如下所示:
public class ServiceClient : BaseClient<IServiceClient>
{
public IList<DataObject> FindAll()
{
// how to control what base.Channel.FindAll return during deserialization.
return base.Channel.FindAll();
}
}
请注意,我不想做这样的事情:
public class ServiceClient : BaseClient<IServiceClient>
{
public IList<DataObject> FindAll()
{
var dtos = base.Channel.FindAll();
var dtoProxies = Mapper.Map<DataObject, DataObjectProxy>();
return dtoProxies;
}
}
我想要一种方法,以便 WCF 自动返回List<DataObject>
哪些元素实际上是 type DataObjectProxy
。
关于如何做到这一点的任何建议?
谢谢!
编辑:示例 DataObject 类:
[DataContract]
public class DataObject
{
public virtual List<OtherDomainObject> SubItems { get; set; }
}
public class DataObjectProxy : DataObject
{
public override List<OtherDomainObject> SubItems
{
get { // Custom way to retrieve collection... }
set { // Etc.. }
}
}