自訂序列化範例
這個範例是以工作流程序列化範例範例為基礎所建立。此範例會示範如何序列化工作流程 (其所包含的活動具有無法由預設序列化程式所序列化的屬性)。
在此範例中會建立一個宣告式工作流程。這個工作流程是使用工作流程 (Workflow) 物件模型所組成,而不是用程式碼檔案所定義。新增兩個自訂活動:QueueActivity 和 StackActivity,兩者各自具有 Queue 類型和 Stack 類型的屬性。由於 Queue 和 Stack 物件都沒有通用於多數集合類型的預設 Add 和 Remove 方法,標準工作流程序列化程式並不知道要如何存取它們的資料。因此,必須針對這些類型實作自訂序列化程式。
若要實作自訂序列化程式,您必須先覆寫預設的活動序列化程式。您可以在自訂活動上進行屬性 (Attribute) 定義以做到這點:
[DesignerSerializer(typeof(QueueActivitySerializer), typeof(WorkflowMarkupSerializer))]
自訂活動序列化程式 (QueueActivitySerializer 和 StackActivitySerializer) 是設計用來在進行序列化 (Serialization) 和還原序列化 (Deserialization) 的之前與之後,新增和移除討論中參數 (在此範例中為 Queue 和 Stack) 所使用之物件類型的自訂序列化程式。這些自訂活動序列化程式會在由相關事件 (指用於序列化的 OnBeforeSerialize 和 OnAfterSerialize,以及用於還原序列化的 OnBeforeDeserialize 和 OnAfterDeserialize) 公開 (Expose) 的序列化管理員上,呼叫 AddSerializationProvider 與 RemoveSerializationProvider。
物件類型序列化程式 (QueueSerializer 和 StackSerializer) 會覆寫序列化程式之基底類別 (Base Class) (WorkflowMarkupSerializer) 的相關方法,以存取適當集合類型中的物件。因此,Queue 序列化程式會呼叫 Queue.Enqueue 來將物件新增到佇列,Stack 序列化程式則會呼叫 Stack.Push。同樣地,GetChildren 方法會將集合轉換成陣列清單。若是 Stack 物件,這會牽涉到使項目的順序反向以提供相同的先進後出堆疊行為。
注意: |
---|
儘管透過此範例中描述的方法可支援建立使用 Queue 和 Stack 物件的工作流程,但是在執行階段編譯的工作流程並不支援使用這些集合類型,詳細資訊請參閱簡單記憶體中範例。 |
建置範例
按一下 [下載範例] 來下載範例。
這樣會將範例專案擷取到本機硬碟上。
按一下 [開始],並依序指向 [程式集] 和 [Microsoft Windows SDK],再按一下 [CMD 殼層]。
移至範例的來源目錄。
在命令提示字元上,輸入 MSBUILD <Solution file name>。
執行範例
- 在 [SDK 命令提示字元] 視窗中,於 CustomSerialization\bin\debug 資料夾 (若是範例的 VB 版本,則是 CustomSerialization\bin 資料夾) 中執行此 .exe 檔案,該資料夾位於此範例的主要資料夾下方。
請參閱
其他資源
Copyright © 2007 by Microsoft Corporation. All rights reserved.