Variablen, Datentypen und Exceptions

Serialisierbarkeit

Alle Datentypen, die in Aktivitäten verwendet werden müssen serialisierbar (mit dem .NET DataContractSerializer) sein. Nur so kann die Workflow Engine das Datenobjekt in der Datenbank speichern, wenn der Workflow pausiert wird.

Bei allen komplexen Datentypen, die in Aktivitäten verwendet werden reicht es, das Attribut “DataMemberAttribute | Microsoft Learn“ bei allen Properties anzugeben. Alle Properties benötigen außerdem einen getter und setter. Die Klasse benötigt zudem einen parameterlosen Konstruktur.

Auch Exception-Klassen müssen serialisierbar und deserialisierbar sein. Das kann mit derMethoden “GetObjectData()” und einem Konstruktur mit den Parametern “(SerializationInfo info, StreamingContext context)“.
Hier ein Beispiel einer Exception-Klasse:

using System.Runtime.Serialization; [Serializable] public class ActivityException : Exception { //constructors to serialise Exception class public ActivityException() { } public ActivityException(string message) : base(message) { } public ActivityException(string message, Exception innerException) : base(message, innerException) { } //datamember-Attribute for serialisation with .NET ContractSerializer [DataMember] public int ErrorCode { get; set; } ///<summary> /// Implemented to serialize data. The method is called on serialization. /// </summary> public override void GetObjectData(SerializationInfo info, StreamingContext context) { base.GetObjectData(info, context); info.AddValue(nameof(ErrorCode), ErrorCode, typeof(int)); } /// <summary> /// The special constructor is used to deserialize values. /// </summary> public ActivityException(SerializationInfo info, StreamingContext context):base(info, context) { foreach (SerializationEntry entry in info) { switch (entry.Name) { case nameof(ErrorCode): ErrorCode = info.GetInt32(nameof(ErrorCode)); break; ... } } } }