Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[C#]PASSER UN TABLEAU D'OBJETS PAR WEB METHODS (SERIALISATION)


Information sur le tutorial

Catégorie :Web Services Tutorial .NET ( DotNet ) Date de création : 17/10/2005 11:07:37 Vu : 17 929 fois

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

Description

Ce tutorial explique comment passer un tableau d'objets par WebMethods.

Tutorial

Lorsque nous travaillons en architecture n-Tiers, le découpage de l'application est tel qu'il est souvent utile de passer des tableaux d'objets de couche en couche.

Pour l'exemple, prenons la méthode GetListPlaces() qui retourne une ArrayList d'objets de type Place. Tout marche bien lorsque les appels entre couche restent locaux (par DLL), mais tout se complique si cette méthode GetListPlaces() est une Web Method, c'est à dire accessible à distance par Web Services !

 

En effet, il est impossible de passer, par Web Method, une ArrayList, car celle-ci n’est pas serialisable. Comment faire, alors, pour récupérer une liste d'objets par Web Services ?

Réponse : il faut alors transformer l’ArrayList en tableau d’objets serialisables.

 

Voici, dans notre cas, la marche à suivre :

·      D’après la classe Place originale (ci-dessous), faire une classe dite « Conteneur », c'est-à-dire composée de toutes les propriétés de la classe d’origine mais sans aucune méthode (à part les constructeurs...). Appelons cette classe PlaceInfos. Dans cette classe conteneur (PlaceInfos), la méthode PlaceInfos (2 surcharges) correspond aux constructeurs : un constructeur vide, obligatoire, et un constructeur permettant d’initialiser l’objet PlaceInfos. Voici ce constructeur :

 

public PlaceInfos(string idPlace, string labelPlace)

{

      this.IdPlace = idPlace;

      this.LabelPlace = labelPlace;

}

 
A ce stade, nous sommes donc capables d'instancier des objets de type Place, et des objets de type PlaceInfos. Chaque objet de type PlaceInfos n'est en fait qu'une "copie", une "image", d'un objet Place correspondant. La différence : l'objet PlaceInfos ne contient aucune méthode et est donc serialisable, c'est à dire qu'il pourra passer par Web Method... L'idée est alors de transformer la liste d'objets Place (non serialisables) fournie par la méthode GetListPlaces() en tableau de PlaceInfos (serialisables), comme ceci :

 

·      A partir d’une liste d’objets de type Places, créer un tableau d’objets de type PlaceInfos, comme ceci :

 

// Récupérer toutes les pièces

ArrayList allPlaces = GetListPlaces();   // Fourni une ArrayList d'objets Place

 

// Pour chaque pièce trouvée, créer un objet PlaceInfos correspondant

foreach (string onePlace in allPlaces

{

      // Créer un objet de type PlaceInfos et le charger à la volée

      PlaceInfos myPlaceInfos = new PlaceInfos(onePlace.IdPlace, onePlace.LabelPlace);

 

      // Ajouter l'objet dans une ArrayList

      listOfPlacesInfos.Add(myPlaceInfos);

}

                       

// Transformer l’ArrayList de PlaceInfos en un tableau de PlaceInfos

// Cette manipulation permet de serialiser ce tableau et ainsi l'utiliser en webmethod (une ArrayList n'est pas serialisable...)

return (PlaceInfos[])listOfPlacesInfos.ToArray(typeof(PlaceInfos));

 

Le tableau ainsi retourné peut être retourné par une Web Method puisqu’il est serialisable.

19 octobre 2005 15:49:19 :
Suppression des images non visibles
signaler à un administrateur
Commentaire de boumarsel le 23/02/2006 18:30:47

la classe ArrayList est serialisable. mais son instance (objet) doit contenir uniquement des objets serialisables sinon une exception est generée.
voila un extrait de la page apropos de "Classe ArrayList" dans MSDN, la classe est serialisable par définition :)

[C#]
[Serializable]
public class ArrayList : IList, ICollection, IEnumerable,
   ICloneable

---
bonne chance

signaler à un administrateur
Commentaire de bingweiller le 19/03/2007 16:16:30

Bonjour, j'ai un peu le même probléme avec un dataset typé que je dois passer par webMethod.

Comment faire, car le dataset (serveur et client) viens d'un fichier xsd et pour l'instant côté client seul le dataset typé issue de la webMethod fonctionne pour utiliser la méthode.

Faut-il le sérialiser aussi ?

BING

signaler à un administrateur
Commentaire de Bilou972 le 15/12/2007 01:08:16

Super tuto. Même si comme dit Boumarsel la classe ArrayList est sérialisable, c'est super chiant à faire.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,125 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.