オブジェクトではなくオブジェクトインターフェースの配列を返すことは可能ですか?
-
03-07-2019 - |
質問
アプリケーションの特殊なリストを記述するインターフェイスがあります...
Public Interface IAlphabeticListItem
Property StartingLetter() As String
Property DetailsList() As Generic.List(Of DetailsData)
End Interface
複数のオブジェクトがこのインターフェースを実装していますが、それらを基礎となるオブジェクトとしてではなく、インターフェースとしてWebサービスで返したいと思います。
<WebMethod()> _
Public Function GetCategoryList(...) As Generic.List(Of IAlphabeticListItem)
...
End Function
残念ながら、これにより例外が発生します
インターフェイスIAlphabeticListItemをシリアル化できません。
例外の詳細:System.NotSupportedException:インターフェイスIAlphabeticListItemをシリアル化できません。
インターフェイスをシリアル化できるようにする方法はありますか、それとも各オブジェクトをインターフェイスを実装する具体的なクラスに変換し、そのクラスを返す必要がありますか?
解決
はい、いいえ。サポートされていないため、XMLシリアル化の汎用クラスを直接公開することはできません。ただし、同じコレクションで非ジェネリックインターフェイスを公開し、シリアル化することはできます。このブログでは、この作業を行う方法について詳しく説明しています
他のヒント
今すぐテストする時間はありませんが、C#ではインターフェイスを拡張できるので、VB.NETでそれを行えると思います。
IAlphabeticListItemをISerializableに拡張するだけ
所属していません StackOverflow