Можно ли вернуть массив объектов интерфейса, а не объекта?

StackOverflow https://stackoverflow.com/questions/610339

Вопрос

У меня есть интерфейс, который описывает специализированный список в моем приложении ...

Public Interface IAlphabeticListItem

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

End Interface

Несколько объектов реализуют этот интерфейс, но я хочу вернуть их в веб-сервисе не как базовый объект, а как интерфейс.

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

    ...

End Function

К сожалению, это вызывает исключение

Невозможно сериализовать интерфейс IAlphabeticListItem.

Сведения об исключении: System.NotSupportedException: невозможно сериализовать интерфейс IAlphabeticListItem.

Есть ли способ сделать интерфейс сериализуемым или мне придется преобразовать каждый из моих объектов в конкретный класс, реализующий интерфейс, а затем вернуть этот класс?

Это было полезно?

Решение

Да и нет. Вы не можете напрямую предоставить универсальный класс для сериализации XML, потому что он не поддерживается. Однако вы можете выставить неуниверсальный интерфейс в той же коллекции и сериализовать его. В этом блоге подробно рассказывается о том, как сделать эту работу

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

Другие советы

У меня нет времени, чтобы проверить это прямо сейчас, но в C # вы можете расширить интерфейсы, поэтому я полагаю, вы можете сделать это в VB.NET.

Просто сделайте IAlphabeticListItem расширением ISerializable

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top