2009-03-04 8 views
0

Ich habe eine Schnittstelle, die eine spezielle Liste in meiner Anwendung beschreibt ...ist es möglich, ein Array von Objekt Interfaces und nicht ein Objekt zurückzugeben?

Public Interface IAlphabeticListItem 

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

End Interface 

Mehrere Objekte diese Schnittstelle implementieren, aber ich mag, dass sie in einem Webservice zurück nicht als das zugrunde liegende Objekt, sondern als Schnittstelle.

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

    ... 

End Function 

Leider bewirkt dies eine Ausnahme

nicht Schnittstelle IAlphabeticListItem serialisiert werden kann.

Ausnahmedetails: System.NotSupportedException: Die Schnittstelle IAlphabeticListItem kann nicht serialisiert werden.

Gibt es eine Möglichkeit, eine Schnittstelle serialisierbar zu machen, oder muss ich jedes meiner Objekte in eine konkrete Klasse konvertieren, die die Schnittstelle implementiert, und dann diese Klasse zurückgeben?

Antwort

1

Ich habe keine Zeit, um es jetzt zu testen, aber in C# können Sie Schnittstellen erweitern, also nehme ich an, dass Sie das in VB.NET tun können.

einfach machen IAlphabeticListItem ISerializable verlängern

+0

dies bedeutet Dies würde Implementierung GetObjectData (ByVal info Als System.Runtime.Serialization.SerializationInfo, ByVal Kontext Wie System.Runtime.Serialization.StreamingContext) Implementiert System.Runtime.Serialization.ISerializable.GetObjectData in jeder meiner anderen Klassen! – digiguru

+0

Wenn die Objekte, die diese Klassen implementieren, bereits ISerializable sind, sollten Sie keine Probleme haben. Auf der anderen Seite, wenn sie nicht sind, müssen Sie die Schnittstelle sowieso implementieren, so wird es nicht schlimmer machen. – rgargente

Verwandte Themen