è possibile restituire una matrice di oggetti Interface piuttosto che un oggetto?
-
03-07-2019 - |
Domanda
Ho un'interfaccia che descrive un elenco specializzato nella mia applicazione ...
Public Interface IAlphabeticListItem
Property StartingLetter() As String
Property DetailsList() As Generic.List(Of DetailsData)
End Interface
Più oggetti implementano questa interfaccia, ma voglio restituirli in un servizio web non come oggetto sottostante, ma come interfaccia.
<WebMethod()> _
Public Function GetCategoryList(...) As Generic.List(Of IAlphabeticListItem)
...
End Function
Purtroppo, questo provoca un'eccezione
Impossibile serializzare l'interfaccia IAlphabeticListItem.
Dettagli eccezione: System.NotSupportedException: impossibile serializzare l'interfaccia IAlphabeticListItem.
Esiste un modo per rendere serializzabile un'interfaccia o devo convertire ciascuno dei miei oggetti in una classe concreta che implementa l'interfaccia e quindi restituire quella classe?
Soluzione
Sì e no. Non è possibile esporre direttamente la classe generica per la serializzazione XML perché non è supportata. Puoi tuttavia esporre un'interfaccia non generica sulla stessa raccolta e serializzarla. Questo blog spiega in dettaglio come farlo funzionare
Altri suggerimenti
Non ho tempo per testarlo adesso, ma in C # puoi estendere le interfacce, quindi suppongo che tu possa farlo in VB.NET.
Rendi solo IAlphabeticListItem esteso ISerializable