2009-03-04 4 views
0

J'ai une interface qui décrit une liste spécialisée dans mon application ...est-il possible de renvoyer un tableau d'objets Interface plutôt que d'un objet?

Public Interface IAlphabeticListItem 

    Property StartingLetter() As String 
    Property DetailsList() As Generic.List(Of DetailsData) 

End Interface 

Plusieurs objets implémentent cette interface, mais je veux les retourner dans un webservice non pas comme l'objet sous-jacent, mais comme l'interface.

<WebMethod()> _ 
Public Function GetCategoryList(...) As Generic.List(Of IAlphabeticListItem) 

    ... 

End Function 

Malheureusement, cela provoque une exception

Impossible de sérialiser l'interface IAlphabeticListItem.

Détails de l'exception: System.NotSupportedException: Impossible de sérialiser l'interface IAlphabeticListItem.

Existe-t-il un moyen de rendre sérialisable une interface, ou vais-je devoir convertir chacun de mes objets en une classe concrète implémentant l'interface, puis retourner cette classe?

Répondre

1

Je n'ai pas le temps de le tester maintenant, mais en C# vous pouvez étendre les interfaces, donc je suppose que vous pouvez le faire dans VB.NET.

Assurez-IAlphabeticListItem étendre ISerializable

+0

Pour cela signifierait mise en œuvre GetObjectData (info ByVal comme System.Runtime.Serialization.SerializationInfo, le contexte ByVal comme System.Runtime.Serialization.StreamingContext) Implémente System.Runtime.Serialization.ISerializable.GetObjectData dans chacune de mes autres classes! – digiguru

+0

Si les objets implémentant ces classes sont déjà ISerializable, vous ne devriez rencontrer aucun problème. D'un autre côté, si ce n'est pas le cas, je crains que vous n'ayez besoin d'implémenter l'interface de toute façon, donc cela ne va pas empirer les choses. – rgargente

Questions connexes