WCF サービスを作成し、Contact と Driver という 2 つの特定のオブジェクトを用意しました。Driver は Contact を継承します。Contact オブジェクトは、より大きな Member オブジェクトの一部です。コードには次のものがあります。
<DataContract()>
Public Class Contact
<DataMember()>
Public Name As String
<DataMember()>
Public HomePhone As String
... etc.
End Class
<DataContract()>
Public Class Driver
Inherits Contact
<DataMember()>
Public LicenseNum As String
<DataMember()>
Public LicenseState As String
... etc.
End Class
<DataContract(), KnownType(GetType(Driver))>
Public Class Member
<DataMember()>
Public Info As Contact
<DataMember()>
Public PrimaryStore As Store
... etc.
End Class
datacontract 行に knowntype があるため、Info プロパティを持つ Member オブジェクトを Contact ではなく Driver として作成し、ライセンス情報を保存できます。
私の問題は、返されたデータを確認するためにテスト プロジェクトを作成するときに、Info プロパティを呼び出したときにライセンス情報を取得できないことです。
Dim svc as New Service.RetrieveService
Dim sMember as Member
Dim memNum as String = "ABC123"
sMember = svc.GetMember(memNum)
Console.WriteLine("LicenseNumber" & sMember.Info...PROBLEM!!!)
sMember.Info は、Contact に属するプロパティ (Name、HomePhone など) のみを提供し、Driver に属するプロパティ (LicenseNum、LicenseState など) は提供しません。この情報にアクセスするにはどうすればよいですか?
以下のように、ServiceKnownType を OperationContract に追加しようとしました。
<ServiceContract()>
Public Interface RetrieveMember
<OperationContract(), ServiceKnownType(GetType(Driver))>
Function GetMember(ByVal memberNumber as String) As Member
End Interface
しかし、それは役に立ちませんでした。