不同的接口實現以下情況:如何反序列化與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