這是我想要做的。這應該(理論上)非常簡單。WCF DataContracts和Polymorphism
說我有下面的代碼WCF服務(裸露的骨頭功能):
<DataContract()>
Public Class BaseObj
<DataMember()>
Public ID As Integer
End Class
<DataContract()>
Public Class TestObj1
Inherits BaseObj
Public Sub New(ByVal idval As Integer)
ID = idval
End Sub
End Class
<DataContract()>
Public Class TestObj2
Inherits BaseObj
Public Sub New(ByVal idval As Integer)
ID = idval
End Sub
<DataMember()>
Public DoNotShow As String = "fail"
End Class
這裏是我想寫代碼:
<WebInvoke(Method:="GET", ResponseFormat:=WebMessageFormat.Json, UriTemplate:="Test?reqReportID={reqReportID}")>
Public Function GetCollection(ByVal reqReportID As Integer) As List(Of BaseObj)
Dim myObjs as New List(Of BaseObj)
myObjs.add(new TestObj1(1))
myObjs.add(new TestObj2(2))
return myObjs
End Function
我想JSON響應一下完全是這樣的:[{"ID":1},{"ID":2}]
現在我有當前的代碼返回一個空的響應(沒有錯誤拋出,沒有信息通過)。我可以得到它這樣做是爲了返回東西:
<DataContract(), KnownType(GetType(TestObj1)), KnownType(GetType(TestObj2))>
Public Class BaseObj
<DataMember()>
Public ID As Integer
End Class
但是響應增加了一個「__type」的JSON對象,還增加了「DoNotShow」的JSON對象(不是一件好事)。
這裏的問題是我不希望傳遞每個對象的唯一信息。我只想要通過基類的每個對象共同的信息。我所能做的任何事情都不會改變它,除非我錯過了某些東西,看起來好像WCF的作者在創建OO編程時有一個非常粗略的觀點。
任何洞察你在這裏SO可能會不勝感激。
這很重要,因爲雖然TestObj1和TestObj2在本例中非常相似,但它們在實際應用中卻有很大不同。這個想法是,我有多個構建得非常不同的對象,但有一些共同特徵--OO意味着什麼。我*只需要接收端的通用功能*,但不希望排除在不同服務請求中返回TestObj1對象列表的可能性。它是面向對象的101,並且我爲什麼無法在WCF中做到這一點而言語無倫次。 – riwalk 2011-04-13 01:32:58