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?

¿Fue útil?

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

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top