オブジェクトではなくオブジェクトインターフェースの配列を返すことは可能ですか?

StackOverflow https://stackoverflow.com/questions/610339

質問

アプリケーションの特殊なリストを記述するインターフェイスがあります...

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シリアル化の汎用クラスを直接公開することはできません。ただし、同じコレクションで非ジェネリックインターフェイスを公開し、シリアル化することはできます。このブログでは、この作業を行う方法について詳しく説明しています

http:/ /srtsolutions.com/blogs/billwagner/archive/2006/11/20/xml-serialization-and-generic-interfaces.aspx

他のヒント

今すぐテストする時間はありませんが、C#ではインターフェイスを拡張できるので、VB.NETでそれを行えると思います。

IAlphabeticListItemをISerializableに拡張するだけ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top