Question

J'ai une interface qui décrit une liste spécialisée dans mon application ...

Public Interface IAlphabeticListItem

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

End Interface

Plusieurs objets implémentent cette interface, mais je souhaite les renvoyer dans un service Web non pas en tant qu'objet sous-jacent, mais en tant qu'interface.

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

    ...

End Function

Malheureusement, cela provoque une exception

Impossible de sérialiser l'interface IAlphabeticListItem.

Détails de l'exception: System.NotSupportedException: impossible de sérialiser l'interface IAlphabeticListItem.

Existe-t-il un moyen de rendre une interface sérialisable, ou vais-je devoir convertir chacun de mes objets en une classe concrète implémentant l'interface, puis renvoyer cette classe?

Était-ce utile?

La solution

Oui et non. Vous ne pouvez pas exposer directement la classe générique pour la sérialisation XML car elle n'est pas prise en charge. Vous pouvez toutefois exposer une interface non générique sur la même collection et la sérialiser. Ce blog explique en détail comment réussir ce travail

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

Autres conseils

Je n'ai pas le temps de le tester pour le moment, mais en C #, vous pouvez étendre les interfaces. Je suppose donc que vous pouvez le faire en VB.NET.

Il suffit de faire en sorte que IAlphabeticListItem étend ISerializable

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top