Следующая ситуация:
Наше программное обеспечение работает с бизнес-объектами, в данный момент они отправляются с 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 и с эквивалентностью контракта данных, но WCF все еще продолжает десериализовать элемент как экземпляр BO.
Я должен добавить, что оба способа должны работать: отправка BO и получение его как BO, отправка BO и получение DTO, но, конечно, с разными запросами.
Итак, мой вопрос, возможно ли это, и если да, что я делаю не так?
Спасибо за помощь,
Enyra
Edit:
Я также узнал, что мы используем NetDataSerializer, может ли это быть проблемой, что он не работает?