![]() ![]() | ||||
HomeShow ChangesEditPrintRecent ChangesSubscriptionsLost and FoundFind ReferencesRename
History | DesignerSerializerAttribute provides a way to indicate to the designer serialization manager that a specific type of serializer should be used when serializing the values of an object. This allows you to specify a serializer that is capable of serializing a custom type, for instance. Place this attribute on a class to indicate the serialization object to use when serializing the class. One reason to use tis might be with generic parameters, something not supposted in XOML workflows. Use a custom serializer to enable this. Taken from: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=554070&SiteID=1
using System;
using System.Collections.Generic;
using System.ComponentModel.Design.Serialization;
using System.Text;
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 = parametersIdea.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))] | Wiki Usage
This wiki site is supposed to be a shared resource. As a shared resource everyone is encouraged to add new content or modify existing content! Enjoy the WF wiki. Recent Topics
| ||