WebPageInput WebPageOutput activities use a generic type parameter, which is not supported in Xoml workflows. In order to use them in code separation workflow add a ListSerializer class to the project.
using System;
using System.Collections.Generic;
using System.Text;
using System.Workflow.ComponentModel.Serialization;
using System.ComponentModel.Design.Serialization;
namespace Microsoft.Workflow.Samples.WebPage
{
public class ListSerializer : WorkflowMarkupSerializer, IDesignerSerializationProvider
{
protected override bool CanSerializeToString(WorkflowMarkupSerializationManager serializationManager, object value)
{
return true;
}
protected override void OnBeforeSerialize(WorkflowMarkupSerializationManager serializationManager, object obj)
{
serializationManager.AddSerializationProvider(this);
base.OnBeforeSerialize(serializationManager, obj);
}
protected override void OnAfterSerialize(WorkflowMarkupSerializationManager serializationManager, object obj)
{
base.OnAfterSerialize(serializationManager, obj);
serializationManager.RemoveSerializationProvider(this);
}
protected override void OnBeforeDeserialize(WorkflowMarkupSerializationManager serializationManager, object obj)
{
serializationManager.AddSerializationProvider(this);
base.OnBeforeDeserialize(serializationManager, obj);
}
protected override void OnAfterDeserialize(WorkflowMarkupSerializationManager serializationManager, object obj)
{
base.OnAfterDeserialize(serializationManager, obj);
serializationManager.RemoveSerializationProvider(this);
}
protected override string SerializeToString(WorkflowMarkupSerializationManager serializationManager, object value)
{
List<PageParameter> parameters = (List<PageParameter>)value;
StringBuilder stringValue = new StringBuilder();
foreach (PageParameter parameter in parameters)
{
stringValue.Append(string.Format("{0}:{1},", parameter.Name, parameter.Value));
}
if (stringValue.Length > 0)
{
stringValue.Remove(stringValue.Length - 1, 1);
}
return stringValue.ToString();
}
protected override object DeserializeFromString(WorkflowMarkupSerializationManager serializationManager, Type propertyType, string value)
{
List<PageParameter> paramList = new List<PageParameter>();
string stringValue = value as string;
if (stringValue != string.Empty)
{
string[] parameters = stringValue.Split(',');
for (int i = 0; i < parameters.Length; ++i)
{
string[] paramValues = parameters .Split(':');
if (paramValues.Length != 2)
{
throw new InvalidOperationException();
}
PageParameter parameter = new PageParameter();
parameter.Name = paramValues[0];
parameter.Value = paramValues[1];
paramList.Add(parameter);
}
}
return paramList;
}
#region IDesignerSerializationProvider Members
public object GetSerializer(IDesignerSerializationManager manager, object currentSerializer, Type objectType, Type serializerType)
{
if (objectType == typeof(List<PageParameter>))
{
return this;
}
else
{
return null;
}
}
#endregion
}
}
Then add the following attribute on top of WebPageRequest/WebPageResponse class
[ DesignerSerializer(typeof(ListSerializer), typeof(WorkflowMarkupSerializer))]
Ghenadie Plingau | SDET | WF | This is provided "AS IS" with no warranties, and confers no rights |