Share via


Esempio di serializzazione personalizzata

Download sample

Questo esempio si basa sull'esempio Esempio di serializzazione del flusso di lavoro. Viene illustrato come serializzare flussi di lavoro contenenti attività che dispongono di proprietà che non possono essere serializzate dal serializzatore predefinito.

Nell'esempio, viene creato un flusso di lavoro dichiarativo. Questo è un flusso di lavoro assemblato utilizzando il modello a oggetti del flusso di lavoro anziché essere definito in un file di codice. Vengono aggiunte due attività personalizzate: QueueActivity e StackActivity che dispongono rispettivamente di una proprietà di tipo Queue e di tipo Stack. Dal momento che gli oggetti Queue e Stack non dispongono di metodi Add e Remove predefiniti comuni alla maggior parte dei tipi di insieme, il serializzatore del flusso di lavoro standard non sa come accedere ai relativi dati. Per tali tipi è pertanto necessario implementare dei serializzatori personalizzati.

Per implementare il serializzatore personalizzato, è necessario prima eseguire l'override del serializzatore di attività predefinito. Tale operazione viene eseguita tramite una definizione dell'attributo sull'attività personalizzata:

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

Lo scopo dei serializzatori di attività personalizzati (QueueActivitySerializer e StackActivitySerializer) è di aggiungere e rimuovere un serializzatore personalizzato per il tipo di oggetto utilizzato dal parametro in questione (nell'esempio, Queue and Stack) prima e dopo la serializzazione e la deserializzazione. I serializzatori di attività personalizzata chiamano AddSerializationProvider e RemoveSerializationProvider sul gestore della serializzazione esposto dagli eventi attinenti (OnBeforeSerialize e OnAfterSerialize per la serializzazione e OnBeforeDeserialize e OnAfterDeserialize per deserializzazione).

I serializzatori del tipo di oggetto (QueueSerializer e StackSerializer) eseguono l'override dei metodi attinenti della classe di base dei serializzatori (WorkflowMarkupSerializer) per accedere agli oggetti nel tipo di insieme appropriato. Pertanto, il serializzatore Queue chiama Queue.Enqueue per aggiungere oggetti alla coda e il serializzatore Stack chiama Stack.Push. Analogamente, i metodi GetChildren convertono gli insiemi in elenchi di matrici. Con l'oggetto Stack, viene coinvolta l'inversione dell'ordine degli elementi per fornire lo stesso comportamento first-in, last-out di uno stack.

Nota

Mentre la creazione di flussi di lavoro che utilizzano oggetti Queue e Stack è supportata dal metodo descritto in questo esempio, l'utilizzo di questi tipi di insieme non è supportato per flussi di lavoro compilati in fase di runtime, come descritto in Esempio semplice in memoria.

Per generare l'esempio

  1. Scaricare l'esempio facendo clic su Scarica esempio.

  2. In tal modo viene estratto il progetto di esempio sul disco rigido locale.

  3. Fare clic sul pulsante Start, scegliere Programmi, Microsoft Windows SDK e fare clic su CMD Shell.

  4. Accedere alla directory di origine dell'esempio.

  5. Al prompt dei comandi, immettere MSBUILD <nome file soluzione>.

Per eseguire l'esempio

  • Nella finestra del prompt dei comandi di SDK, eseguire il file exe nella cartella CustomSerialization\bin\debug (o nella cartella CustomSerialization\bin per la versione VB dell'esempio), collocata sotto la cartella principale dell'esempio.

Vedere anche

Altre risorse

Esempi di markup
Workflow Markup Overview

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.