Condividi tramite


Serializzazione di attività personalizzate

Ogni attività ha una logica di serializzazione che consente ai metadati dell'attività di essere rappresentati in un tag del flusso di lavoro. Ciò descrive flussi di lavoro che possono essere eseguiti dal motore di runtime Windows Workflow Foundation. Il tag del flusso di lavoro è una combinazione di componenti di serializzazione utilizzata per descrivere le gerarchie delle attività che costituiscono i flussi di lavoro e la logica associata attivata quando le attività generano eventi.

Gli sviluppatori di nuove attività ottengono automaticamente la serializzazione predefinita con tag del flusso di lavoro. La serializzazione predefinita è sufficiente per la maggior parte delle attività, ma qualche volta è necessario creare un serializzatore personalizzato. Per ulteriori informazioni sulla funzionalità della serializzazione predefinita utilizzata da Windows Workflow Foundation, vedere Procedura: serializzare i flussi di lavoro.

Quando si serializzano proprietà di attività in una utilità di progettazione, è necessario utilizzare l'attributo DesignerSerializationVisibilityAttribute per determinare se la proprietà sarà serializzata (Visible), non serializzata (Hidden) o se solo il contenuto della proprietà sarà serializzato (Content).

Per impostazione predefinita, tutte le proprietà di attività personalizzate sono impostate su DesignerSerializationVisibility.Visible in modo da essere serializzate dall'utilità di progettazione. Se si vuole serializzare una proprietà dell'insieme, ad esempio un ArrayList, è necessario decorare la proprietà con DesignerSerializationVisibility.Content così che il contenuto di ArrayList venga serializzato. Se non si decora la proprietà con questo attributo, la proprietà dell'insieme non verrà serializzata. Per ulteriori informazioni sull'utilità di progettazione, vedere Designer Serialization Overview.

Serializzazione di tipi di dati generici

L'attributo DesignerSerializationVisibilityAttribute viene utilizzato per serializzare proprietà delle attività personalizzate; tuttavia, non tutti i tipi di dati possono essere serializzati. Ad esempio, i tipi più generici di dati non possono essere serializzati. Solo tipi di dati generici che ereditano da IList o IDictionary possono essere serializzati. Se li si vuole utilizzare, è necessario seguire le regole seguenti:

  • Il valore DesignerSerializationVisibility.Content deve decorare la proprietà.

  • La proprietà è in sola lettura.

DesignerSerializationVisibility.Content e ContentPropertyAttribute

Quando si serializzano proprietà in attività personalizzate, si può utilizzare DesignerSerializationVisibility.Content e ContentPropertyAttribute. Anche se sembrano simili, sono diversi ed è necessario capirne le differenze prima di serializzare le attività personalizzate o si riceveranno risultati imprevisti.

La differenza tra DesignerSerializationVisibility.Content e ContentPropertyAttribute è che mentre DesignerSerializationVisibility.Content serializza il contenuto del tipo di dati dell'insieme, ContentPropertyAttribute non serializza un nome della proprietà per aumentare la chiarezza dei dati serializzati. Inoltre, ContentPropertyAttribute decora la classe mentre DesignerSerializationVisibility.Content decora la proprietà. Non si devono mai utilizzare entrambi per decorare una proprietà, altrimenti verrà restituito un errore di compilazione.

Nell'esempio seguente viene illustrata un'attività personalizzata che ha una matrice di stringhe. Mostra come i dati sono serializzati con e senza utilizzare ContentPropertyAttribute.

[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.
}

Si tratta della versione serializzata che contiene l'attributo ContentPropertyAttribute.

<?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>

Si tratta della versione serializzata che contiene l'attributo ContentPropertyAttribute. Notare l'elemento grassetto della proprietà nell'esempio.

<?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>

Vedere anche

Concetti

Procedura: serializzare i flussi di lavoro

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.