我想拿一個我在服務器上收到的datacontract對象,對它做一些操作,然後返回它的升級版本,但它似乎沒有工作。我可以通過使用KnownType或ServiceKnownType屬性來使其工作,但我不想將所有數據往返。下面是一個例子:WCF DataContract Upcasting
[DataContract]
public class MyBaseObject
{
[DataMember]
public int Id { get; set; }
}
[DataContract]
public class MyDerivedObject : MyBaseObject
{
[DataMember]
public string Name { get; set; }
}
[ServiceContract(Namespace = "http://My.Web.Service")]
public interface IServiceProvider
{
[OperationContract]
List<MyBaseObject> SaveMyObjects(List<MyDerivedObject> myDerivedObjects);
}
public class ServiceProvider : IServiceProvider
{
public List<MyBaseObject> SaveMyObjects(List<MyDerivedObject> myDerivedObjects)
{
... do some work ...
myDerivedObjects[0].Id = 123;
myDerivedObjects[1].Id = 456;
myDerivedObjects[2].Id = 789;
... do some work ...
return myDerivedObjects.Cast<MyBaseObject>().ToList();
}
}
任何人有任何想法如何得到這個無需重新創建新的對象或使用KnownType屬性工作?
IList發送得很好。這是當我嘗試向上轉換不起作用的對象時。我不想將所有數據往返。 – 2009-06-26 01:14:06
您可以嘗試使用自定義映射代碼或接口。 – 2009-06-26 12:11:21