“自定义序列化”示例

Download sample

此示例以“工作流序列化”示例示例为基础。 它演示如何序列化包含活动的工作流,默认序列化程序无法对这些活动具有的属性进行序列化。

在示例中创建了一个声明性工作流。 此工作流是使用工作流对象模型汇编的,而不是在代码文件中定义的。 添加了两个自定义活动:QueueActivity 和 StackActivity,这两个活动分别具有 Queue 类型和 Stack 类型的属性。 由于 QueueStack 对象没有大多数集合类型共有的默认 AddRemove 方法,因此标准工作流序列化程序不知道如何访问这些对象的数据。 因而,必须为这些类型实现自定义序列化程序。

若要实现自定义序列化程序,必须首先重写默认活动序列化程序。 可使用自定义活动上的属性定义来执行此操作:

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

自定义活动序列化程序(QueueActivitySerializer 和 StackActivitySerializer)的用途是:在序列化和反序列化前后为所述参数(示例中的 Queue 和 Stack)使用的对象类型添加和移除自定义序列化程序。 自定义活动序列化程序在相关事件(这些事件为用于序列化的 OnBeforeSerializeOnAfterSerialize,以及用于反序列化的 OnBeforeDeserializeOnAfterDeserialize)公开的序列化管理器上调用 AddSerializationProviderRemoveSerializationProvider

对象类型序列化程序(QueueSerializer 和 StackSerializer)重写序列化程序基类 (WorkflowMarkupSerializer) 的相关方法,以便访问适当集合类型中的对象。 因此,Queue 序列化程序调用 Queue.Enqueue 将对象添加到队列,并且 Stack 序列化程序将调用 Stack.Push。 同样,GetChildren 方法将集合转换为数组列表。 对于 Stack 对象,这牵涉到反转各项的顺序以提供相同的堆栈先进后出行为。

提示

尽管通过此示例中描述的方法可以支持创建使用 Queue 和 Stack 对象的工作流,但如简单的内存中示例中所述,对于在运行时编译的工作流不支持使用这些集合类型。

生成示例

  1. 通过单击**“下载示例”**来下载该示例。

  2. 这会将示例项目提取到本地硬盘。

  3. 单击**“开始”,依次指向“程序”“Microsoft Windows SDK”,然后单击“CMD 外壳”[CMD Shell]**。

  4. 转到示例的源目录。

  5. 在命令提示符处键入 MSBUILD <解决方案文件名>

运行示例

  • 在 SDK 命令提示窗口中,运行 CustomSerialization\bin\debug 文件夹(对于该示例的 VB 版本为 CustomSerialization\bin 文件夹)中的 .exe 文件,该文件夹位于该示例的主文件夹下。

请参见

其他资源

“标记”示例
Workflow Markup Overview

Footer image

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。