カスタム シリアル化のサンプル
このサンプルは、ワークフロー シリアル化サンプルのサンプルを基にしています。既定のシリアライザではシリアル化できないプロパティを持つアクティビティを含むワークフローをシリアル化する方法を示します。
このサンプルでは、宣言型ワークフローが作成されます。宣言型ワークフローとは、コード ファイルで定義するのではなく、ワークフロー オブジェクト モデルを使用して組み立てられるワークフローです。これに、QueueActivity および StackActivity という 2 つのカスタム アクティビティを追加します。この 2 つのアクティビティは、Queue 型のプロパティおよび Stack 型のプロパティをそれぞれ持っています。Queue オブジェクトと Stack オブジェクトには、ほとんどのコレクション型に共通する既定の Add および Remove メソッドがないため、標準のワークフロー シリアライザではそれらのオブジェクトのデータにアクセスできません。したがって、このような型に対応するカスタム シリアライザを実装する必要があります。
カスタム シリアライザを実装するには、まず既定のアクティビティ シリアライザをオーバーライドする必要があります。これは、カスタム アクティビティの属性定義で行います。
[DesignerSerializer(typeof(QueueActivitySerializer), typeof(WorkflowMarkupSerializer))]
カスタム アクティビティ シリアライザ (QueueActivitySerializer と StackActivitySerializer) の目的は、シリアル化および逆シリアル化の前後に、問題のパラメータ (サンプルでは、Queue と Stack) が使用するオブジェクト型に対応するカスタム シリアライザを追加または削除することです。カスタム アクティビティ シリアライザは、関連するイベントによって公開されるシリアル化マネージャの AddSerializationProvider と RemoveSerializationProvider を呼び出します。シリアル化に関連するイベントは OnBeforeSerialize と OnAfterSerialize、逆シリアル化に関連するイベントは OnBeforeDeserialize と OnAfterDeserialize です。
オブジェクト型シリアライザ (QueueSerializer と StackSerializer) は、シリアライザの基本クラス (WorkflowMarkupSerializer) の関連メソッドをオーバーライドして、適切な型のコレクション内のオブジェクトにアクセスします。したがって、Queue シリアライザはオブジェクトをキューに追加するために Queue.Enqueue を呼び出し、Stack シリアライザは Stack.Push を呼び出します。同様に、GetChildren メソッドはコレクションを配列リストに変換します。Stack オブジェクトの場合は、スタックでの後入先出の動作を提供するために、項目の順序を逆にします。
メモ : |
---|
Queue オブジェクトと Stack オブジェクトを使用するワークフローの作成は、このサンプルで説明されている方法でサポートされますが、これらのコレクション型の使用は、実行時にコンパイルされるワークフローに対してはサポートされません。詳細については、「簡単なインメモリのサンプル」を参照してください。 |
サンプルをビルドするには
[サンプルのダウンロード] をクリックしてサンプルをダウンロードします。
サンプル プロジェクトがローカル コンピュータのハード ディスクにダウンロードされます。
[スタート] ボタンをクリックし、[すべてのプログラム] をポイントします。次に、[Microsoft Windows SDK] をポイントし、[CMD シェル] をクリックします。
サンプルのソース ディレクトリに移動します。
コマンド プロンプトで、「MSBUILD <ソリューション ファイル名>」と入力します。
サンプルを実行するには
- SDK コマンド プロンプト ウィンドウで、CustomSerialization\bin\debug フォルダ (このサンプルの VB バージョンでは CustomSerialization\bin フォルダ) にある .exe ファイルを実行します (このサンプルでは、メイン フォルダの下にあります)。
関連項目
その他の技術情報
マークアップのサンプル
Workflow Markup Overview
Copyright © 2007 by Microsoft Corporation.All rights reserved.