File: AuthoringOM\Serializer\ActivityMarkupSerializationProvider.cs
Project: ndp\cdf\src\WF\Common\System.Workflow.ComponentModel.csproj (System.Workflow.ComponentModel)
namespace System.Workflow.ComponentModel.Serialization
{
    using System;
    using System.ComponentModel.Design.Serialization;
 
    #region Class ActivityMarkupSerializationProvider
    internal sealed class ActivityMarkupSerializationProvider : WorkflowMarkupSerializationProvider
    {
        public override object GetSerializer(IDesignerSerializationManager manager, object currentSerializer, Type objectType, Type serializerType)
        {
            // If this isn't a serializer type we recognize, do nothing.  Also, if metadata specified
            // a custom serializer, then use it.
            if (serializerType != typeof(WorkflowMarkupSerializer) || currentSerializer != null)
                return null;
 
            if (typeof(CompositeActivity).IsAssignableFrom(objectType))
                return new CompositeActivityMarkupSerializer();
 
            if (typeof(ItemList<>).IsAssignableFrom(objectType))
                return new CollectionMarkupSerializer();
 
            // Ask the base class if it has a specialized serializer class for this object type.  If it returns
            // its default serializer, return our default serializer instead.
            IDesignerSerializationProvider baseProvider = new WorkflowMarkupSerializationProvider() as IDesignerSerializationProvider;
            object baseSerializer = baseProvider.GetSerializer(manager, currentSerializer, objectType, serializerType);
            if (baseSerializer.GetType() != typeof(WorkflowMarkupSerializer))
                return baseSerializer;
 
            return new ActivityMarkupSerializer();
        }
    }
    #endregion
}