2009-03-04 9 views
0

私は自分のアプリケーションの専門リストを記述するインタフェースを持っている...オブジェクトではなくオブジェクトのインターフェイスの配列を返すことは可能ですか?

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をシリアル化できません。

インターフェイスをシリアライズ可能にする方法はありますか、または各オブジェクトをインターフェイスを実装する具象クラスに変換してからクラスを返す必要がありますか?

答えて

1

はいといいえを拡張します。サポートされていないため、XMLシリアル化の汎用クラスを直接公開することはできません。ただし、同じコレクションに非ジェネリックインターフェイスを公開し、それをシリアル化することはできます。このブログは、これが実装GetObjectData(System.Runtime.Serialization.SerializationInfoとしてByVal情報、System.Runtime.Serialization.StreamingContextとしてByValコンテキスト)を意味するだろう行うには、この作品に

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

1

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

だけIAlphabeticListItemがISerializable

+0

を作成する方法に非常に詳細に入ります私の他の各クラスでSystem.Runtime.Serialization.ISerializable.GetObjectDataを実装します! – digiguru

+0

そのクラスを実装しているオブジェクトがすでにISerializableである場合は、問題はありません。一方、そうでない場合は、インターフェイスを実装する必要がありますので、悪化させることはありません。 – rgargente

関連する問題