Freigeben über


Serialisieren von benutzerdefinierten Aktivitäten

Jede Aktivität verfügt über eine Serialisierungslogik, die das Darstellen der Aktivitätsmetadaten in Workflowmarkup ermöglicht. Dabei werden Workflows beschrieben, die vom Windows Workflow Foundation-Laufzeitmodul ausgeführt werden können. Workflowmarkup ist ein Komponentenserialisierungsschema zur Beschreibung der Aktivitätshierarchien, aus denen Workflows bestehen, und der zugewiesenen Logik, die beim Auslösen von Ereignissen durch die Aktivitäten aktiviert wird.

Entwickler neuer Aktivitäten erhalten die Standardserialisierung automatisch im Workflowmarkup. Diese Standardserialisierung ist für die meisten Aktivitäten in der Regel ausreichend, doch manchmal muss ein benutzerdefiniertes Serialisierungsprogramm erstellt werden. Weitere Informationen zur Standardserialisierungsfunktion, die von Windows Workflow Foundation verwendet wird, finden Sie unter Gewusst wie: Serialisieren von Workflows.

Beim Serialisieren von Aktivitätseigenschaften in einem Designer muss mit dem DesignerSerializationVisibilityAttribute-Attribut bestimmt werden, ob die Eigenschaft serialisiert (Visible) bzw. nicht serialisiert (Hidden), oder ob nur der Inhalt der Eigenschaft serialisiert wird (Content).

Standardmäßig werden alle benutzerdefinierten Aktivitätseigenschaften auf DesignerSerializationVisibility.Visible festgelegt, damit sie vom Designer serialisiert werden. Soll eine Auflistungseigenschaft serialisiert werden (beispielsweise ArrayList), muss die Eigenschaft mit DesignerSerializationVisibility.Content ergänzt werden, damit der Inhalt von ArrayList serialisiert wird. Wird die Eigenschaft nicht mit diesem Attribut ergänzt, wird die Auflistungseigenschaft nicht serialisiert. Weitere Informationen zur Designerserialisierung finden Sie unter Designer Serialization Overview.

Serialisieren von generischen Datentypen

Mit dem DesignerSerializationVisibilityAttribute-Attribut werden Eigenschaften von benutzerdefinierten Aktivitäten serialisiert; allerdings können nicht alle Datentypen serialisiert werden. Zum Beispiel können die meisten generischen Datentypen nicht serialisiert werden. Nur generische Datentypen, die von IList oder IDictionary erben, können serialisiert werden. Wenn Sie jene Datentypen verwenden möchten, beachten Sie folgende Regeln:

  • Der DesignerSerializationVisibility.Content-Wert muss die Eigenschaft ergänzen.

  • Die Eigenschaft ist schreibgeschützt.

DesignerSerializationVisibility.Content im Vergleich zu ContentPropertyAttribute

Beim Serialisieren von Eigenschaften mit benutzerdefinierten Aktivitäten besitzen Sie die Möglichkeit, sowohl DesignerSerializationVisibility.Content als auch ContentPropertyAttribute zu verwenden. Trotz der vermeintlichen Ähnlichkeit bestehen Unterschiede, und Sie müssen sich vor dem Serialisieren der benutzerdefinierten Aktivitäten über diese Unterschiede im Klaren sein, da Sie andernfalls unerwartete Ergebnisse erhalten.

Der Unterschied zwischen DesignerSerializationVisibility.Content und ContentPropertyAttribute besteht darin, dass DesignerSerializationVisibility.Content den Inhalt des Auflistungsdatentyps serialisiert, ContentPropertyAttribute jedoch das Serialisieren eines Eigenschaftennamens auslässt, um die Eindeutigkeit der serialisierten Daten zu verbessern. Zudem ergänzt ContentPropertyAttribute die Klasse, wohingegen DesignerSerializationVisibility.Content die Eigenschaft ergänzt. Verwenden Sie niemals beide Werte, um eine Eigenschaft zu ergänzen. Andernfalls tritt ein Kompilierungsfehler auf.

Im folgenden Beispiel wird eine benutzerdefinierte Aktivität mit einem Zeichenfolgenarray dargestellt. Im Beispiel wird das Serialisieren von Daten mit bzw. ohne ContentPropertyAttribute gezeigt.

[ContentProperty("Items")]
public class CustomActivity : Activity
{
    private string[] itemsList = {"item1", "item2", "item3"};

    public CustomActivity()
    {
    }

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public IList<string> Items
    {
        get
        {
            return itemsList;
        }
    }

    // Activity.Execute and other overridden methods not included for clarity.
}

Dies ist die serialisierte Version, die das ContentPropertyAttribute-Attribut enthält.

<?xml version="1.0" encoding="utf-16"?><ns0:CustomActivity x:Name="CustomActivity" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" xmlns:ns0="clr-namespace:CustomWFActivities;Assembly=CustomWFActivities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
    <x:Array Type="{x:Type p3:String}" xmlns:p3="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <ns1:String xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">item1</ns1:String>
        <ns1:String xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">item2</ns1:String>
        <ns1:String xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">item3</ns1:String>
    </x:Array>
</ns0:CustomActivity>

Dies ist die serialisierte Version, die das ContentPropertyAttribute-Attribut nicht beinhaltet. Achten Sie im Beispiel auf das fett gedruckte Element der Eigenschaft.

<?xml version="1.0" encoding="utf-16"?><ns0:CustomActivity x:Name="CustomActivity" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" xmlns:ns0="clr-namespace:CustomWFActivities;Assembly=CustomWFActivities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
    <ns0:CustomActivity.Items Type="{x:Type p3:String}" xmlns:p3="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <ns1:String xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">item1</ns1:String>
        <ns1:String xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">item2</ns1:String>
        <ns1:String xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">item3</ns1:String>
    </ns0:CustomActivity.Items>
</ns0:CustomActivity>

Siehe auch

Konzepte

Gewusst wie: Serialisieren von Workflows

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.