Можно ли вернуть массив объектов интерфейса, а не объекта? - PullRequest
0 голосов
/ 04 марта 2009

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

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.

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

Ответы [ 2 ]

1 голос
/ 07 марта 2009

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

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

1 голос
/ 04 марта 2009

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

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

...