다음을 통해 공유


사용자 지정 활동 Serialize

모든 활동에는 활동 메타데이터가 워크플로 마크업으로 표현될 수 있도록 하는 serialization 논리가 있습니다. 이 논리는 Windows Workflow Foundation 런타임 엔진에서 실행될 수 있는 워크플로에 대해 설명합니다. 워크플로 마크업은 활동에서 이벤트가 발생할 때 활성화되는 연결된 논리와 워크플로를 구성하는 활동 계층 구조에 대해 설명하는 데 사용되는 구성 요소 serialization 체계입니다.

새 활동의 개발자는 자동으로 기본 serialization을 워크플로 마크업으로 가져옵니다. 이 기본 serialization은 대부분의 활동에 충분하지만 사용자 지정 serializer를 만들어야 하는 경우도 있습니다. Windows Workflow Foundation에서 사용되는 기본 serialization 기능에 대한 자세한 내용은 방법: 워크플로 Serialize를 참조하십시오.

디자이너에서 활동 속성을 serialize하는 경우 DesignerSerializationVisibilityAttribute 특성을 사용하여 속성이 serialize될지(Visible), 아니면 serialize되지 않을지(Hidden), 아니면 속성의 내용만 serialize될지(Content)를 결정해야 합니다.

기본적으로 모든 사용자 지정 활동 속성은 디자이너에서 serialize되도록 DesignerSerializationVisibility.Visible로 설정됩니다. ArrayList와 같은 컬렉션 속성을 serialize하려면 ArrayList의 내용이 serialize되도록 DesignerSerializationVisibility.Content로 속성을 데코레이트해야 합니다. 이 특성으로 속성을 데코레이트하지 않으면 컬렉션 속성이 serialize되지 않습니다. 디자이너 serialization에 대한 자세한 내용은 Designer Serialization Overview를 참조하십시오.

제네릭 데이터 형식 Serialize

DesignerSerializationVisibilityAttribute 특성은 사용자 지정 활동의 속성을 serialize하는 데 사용되지만 모든 데이터 형식이 serialize될 수 있는 것은 아닙니다. 예를 들어, 대부분의 제네릭 데이터 형식은 serialize될 수 없습니다. IList 또는 IDictionary에서 상속하는 제네릭 데이터 형식만 serialize될 수 있습니다. 이러한 데이터 형식을 사용하려면 다음 규칙을 따라야 합니다.

  • DesignerSerializationVisibility.Content 값이 속성을 데코레이트해야 합니다.

  • 속성이 읽기 전용입니다.

DesignerSerializationVisibility.Content와 ContentPropertyAttribute 비교

사용자 지정 활동에 대한 속성을 serialize하는 경우 DesignerSerializationVisibility.ContentContentPropertyAttribute를 모두 사용할 수 있습니다. 둘은 유사해 보이지만 서로 다르므로 사용자 지정 활동을 serialize하기 전에 차이점을 이해해야 합니다. 이렇게 하지 않으면 예기치 않은 결과를 얻게 됩니다.

DesignerSerializationVisibility.ContentContentPropertyAttribute의 차이점은 DesignerSerializationVisibility.Content가 컬렉션 데이터 형식의 내용을 serialize하지만 ContentPropertyAttribute는 serialize된 데이터의 명확성을 높이기 위해 속성 이름을 serialization에서 생략한다는 것입니다. 또한 ContentPropertyAttribute는 클래스를 데코레이트하지만 DesignerSerializationVisibility.Content는 속성을 데코레이트합니다. 둘을 속성을 데코레이트하는 데 사용하면 안 됩니다. 둘을 속성을 데코레이트하는 데 사용하면 컴파일 오류가 발생합니다.

다음 예제에서는 문자열 배열이 있는 사용자 지정 활동을 보여 줍니다. 또한 ContentPropertyAttribute를 사용하지 않고 데이터를 serialize하는 방법을 보여 줍니다.

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

다음은 ContentPropertyAttribute 특성이 포함된 serialize된 버전입니다.

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

다음은 ContentPropertyAttribute 특성이 포함되지 않은 serialize된 버전입니다. 이 예제에서 굵게 표시된 속성 요소를 확인하십시오.

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

참고 항목

개념

방법: 워크플로 Serialize

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.