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?

È stato utile?

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

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

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top