¿Es posible devolver una matriz de objetos Interfaz en lugar de un objeto?
-
03-07-2019 - |
Pregunta
Tengo una interfaz que describe una lista especializada en mi aplicación ...
Public Interface IAlphabeticListItem
Property StartingLetter() As String
Property DetailsList() As Generic.List(Of DetailsData)
End Interface
Varios objetos implementan esta interfaz, pero quiero devolverlos en un servicio web no como el objeto subyacente, sino como la interfaz.
<WebMethod()> _
Public Function GetCategoryList(...) As Generic.List(Of IAlphabeticListItem)
...
End Function
Lamentablemente, esto causa una excepción
No se puede serializar la interfaz IAlphabeticListItem.
Detalles de la excepción: System.NotSupportedException: No se puede serializar la interfaz IAlphabeticListItem.
¿Hay una manera de hacer que una interfaz se pueda serializar, o tendré que convertir cada uno de mis objetos en una clase concreta implementando la interfaz, y luego devolver esa clase?
Solución
Sí y no. No puede exponer directamente la clase genérica para la serialización XML porque no es compatible. Sin embargo, puede exponer una interfaz no genérica en la misma colección y serializarla. Este blog explica detalladamente cómo hacer que esto funcione
Otros consejos
No tengo tiempo para probarlo ahora mismo, pero en C # puedes extender interfaces, así que supongo que puedes hacerlo en VB.NET.
Simplemente haga que IAlphabeticListItem extienda ISerializable