Custom Serialization, exemple
Cet exemple complète l'exemple Workflow Serialization, exemple. Il montre comment sérialiser des workflows qui contiennent des activités qui ont des propriétés qui ne peuvent pas être sérialisées par le sérialiseur par défaut.
Dans l'exemple, un workflow déclaratif est créé. Il s'agit d'un workflow assemblé à l'aide du modèle objet de workflow au lieu d'être défini dans un fichier de code. Deux activités personnalisées sont ajoutées : QueueActivity et StackActivity, qui ont respectivement une propriété de type Queue et de type Stack. Étant donné que les objets Queue et Stack ne comportent pas les méthodes Add et Remove par défaut qui sont communes à la plupart des types de collection, le sérialiseur de workflow standard ne sait pas comment accéder à leurs données. Par conséquent, des sérialiseurs personnalisés doivent être implémentés pour ces types.
Pour implémenter le sérialiseur personnalisé, vous devez commencer par substituer le sérialiseur d'activité par défaut. Pour ce faire, utilisez une définition d'attribut pour l'activité personnalisée :
[DesignerSerializer(typeof(QueueActivitySerializer), typeof(WorkflowMarkupSerializer))]
Le but des sérialiseurs d'activités personnalisés (QueueActivitySerializer et StackActivitySerializer) consiste à ajouter et à supprimer un sérialiseur personnalisé pour le type d'objet utilisé par le paramètre en question (dans l'exemple, Queue et Stack) avant et après la sérialisation et la désérialisation. Les sérialiseurs d'activités personnalisés appellent AddSerializationProvider et RemoveSerializationProvider sur le gestionnaire de sérialisation exposé par les événements pertinents (il s'agit de OnBeforeSerialize et de OnAfterSerialize pour la sérialisation, et OnBeforeDeserialize et de OnAfterDeserialize pour la désérialisation).
Les sérialiseurs de type objet (QueueSerializer et StackSerializer) substituent les méthodes pertinentes de la classe de base des sérialiseurs (WorkflowMarkupSerializer) pour accéder aux objets dans le type de collection approprié. Par conséquent, le sérialiseur Queue appelle Queue.Enqueue pour ajouter des objets à la file d'attente, tandis que le sérialiseur Stack appelle Stack.Push. De la même façon, les méthodes GetChildren convertissent les collections en listes de matrices. Avec l'objet Stack, cela implique d'inverser l'ordre des éléments pour fournir le même comportement "premier entré-dernier sorti" d'une pile.
Remarque : |
---|
Si la création de workflows qui utilisent les objets Queue et Stack est prise en charge via la méthode décrite dans cet exemple, l'utilisation de ces types de collection n'est pas prise en charge pour les workflows compilés pendant l'exécution, comme décrit dans Simple In-Memory, exemple. |
Pour générer l'exemple
Téléchargez l'exemple en cliquant sur Télécharger l'exemple.
L'exemple de projet est alors extrait sur votre disque dur local.
Cliquez sur Démarrer, pointez sur Programmes, puis sur Microsoft Windows SDK et cliquez sur Environnement de commande.
Accédez au répertoire source de l'exemple.
À l'invite de commandes, tapez MSBUILD <Nom du fichier solution>.
Pour exécuter l'exemple
- Dans la fenêtre Invite de commandes du Kit de développement SDK, exécutez le fichier .exe dans le dossier CustomSerialization\bin\debug (ou le dossier CustomSerialization\bin pour la version VB de l'exemple), situé sous le dossier principal de l'exemple.
Voir aussi
Autres ressources
Exemples de balisage
Workflow Markup Overview
Copyright ©2007 par Microsoft Corporation. Tous droits réservés.