Share via


Ejemplo de serialización personalizada

Download sample

Este ejemplo parte del ejemplo Ejemplo de serialización de flujos de trabajo. Muestra cómo serializar flujos de trabajo que contienen actividades con propiedades que el serializador predeterminado no puede serializar.

En el ejemplo se crea un flujo de trabajo declarativo. Se trata de un flujo de trabajo que se ensambla utilizando el modelo de objetos de flujo de trabajo en lugar de definirse en un archivo de código. Se agregan dos actividades personalizadas: QueueActivity y StackActivity, que tienen una propiedad de tipo Queue y de tipo Stack, respectivamente. Dado que los objetos Queue y Stack no tienen los métodos Add y Remove predeterminados habituales en casi todos los tipos de colección, el serializador de flujos de trabajo estándar no puede tener acceso a sus datos. Por consiguiente, se deben implementar serializadores personalizados para esos tipos.

Para implementar el serializador personalizado, primero debe invalidar el serializador de actividades predeterminado. Para hacerlo debe usar una definición de atributos en la actividad personalizada:

[DesignerSerializer(typeof(QueueActivitySerializer), typeof(WorkflowMarkupSerializer))]

La finalidad de los serializadores de actividades personalizados (QueueActivitySerializer y StackActivitySerializer) es la de agregar y quitar un serializador personalizado para el tipo de objeto utilizado por el parámetro en cuestión (en el ejemplo, Queue y Stack) antes y después de la serialización y la deserialización. Los serializadores de actividades personalizados llaman a AddSerializationProvider y a RemoveSerializationProvider en el administrador de serialización expuesto por los eventos pertinentes (son OnBeforeSerialize y OnAfterSerialize para la serialización, y OnBeforeDeserialize y OnAfterDeserialize para la deserialización.)

Los serializadores de tipo de objeto (QueueSerializer y StackSerializer) invalidan los métodos pertinentes de la clase base de los serializadores (WorkflowMarkupSerializer) para tener acceso a los objetos en el tipo de colección adecuado. Por consiguiente, el serializador Queue llama a Queue.Enqueue para agregar objetos a la cola, y el serializador Stack llama a Stack.Push. De igual forma, los métodos GetChildren convierten las colecciones en listas de matrices. Con el objeto Stack, esto implica invertir el orden de los elementos para proporcionar el mismo comportamiento primero en entrar, último en salir de una pila.

Nota

Si bien la creación de flujos de trabajo que utilizan los objetos Queue y Stack se admite a través del método descrito en este ejemplo, no se admite la utilización de estos tipos de colección para los flujos de trabajo compilados en tiempo de ejecución, como se describe en Ejemplo de InMemory simple.

Para generar el ejemplo

  1. Para descargar el ejemplo, haga clic en Descargar ejemplo.

  2. Así se extrae el proyecto de ejemplo en su disco duro local.

  3. Haga clic en Inicio, señale Programas, señale Microsoft Windows SDK y, a continuación, haga clic en CMD Shell.

  4. Vaya al directorio de origen del ejemplo.

  5. En el símbolo del sistema, escriba MSBUILD <nombre del archivo de solución>.

Para ejecutar el ejemplo

  • En la ventana del símbolo del sistema del SDK, ejecute el archivo .exe de la carpeta CustomSerialization\bin\debug (o la carpeta CustomSerialization\bin para la versión de VB del ejemplo), que se encuentra bajo la carpeta principal del ejemplo.

Consulte también

Otros recursos

Ejemplos de marcado
Workflow Markup Overview

Footer image

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.