Можно ли вернуть массив объектов интерфейса, а не объекта?
-
03-07-2019 - |
Вопрос
У меня есть интерфейс, который описывает специализированный список в моем приложении ...
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, потому что он не поддерживается. Однако вы можете выставить неуниверсальный интерфейс в той же коллекции и сериализовать его. В этом блоге подробно рассказывается о том, как сделать эту работу
Другие советы
У меня нет времени, чтобы проверить это прямо сейчас, но в C # вы можете расширить интерфейсы, поэтому я полагаю, вы можете сделать это в VB.NET.
Просто сделайте IAlphabeticListItem расширением ISerializable