![]() ![]() | ||||
HomeShow ChangesEditPrintRecent ChangesSubscriptionsLost and FoundFind ReferencesRename
History | Version 1 of Worflow Foundation doesn't support loading generic types through XAML. Tom Lake posted the following code in http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=628765&SiteID=1 as a temporary workaround for the problem. 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<Parameter> parameters = (List<Parameter>)value; StringBuilder stringValue = new StringBuilder(); foreach (Parameter parameter in parameters) { stringValue.Append(string.Format("{0}:{1},", parameter.Name, parameter.Type.ToString())); } if (stringValue.Length > 0) { stringValue.Remove(stringValue.Length - 1, 1); } return stringValue.ToString(); } protected override object DeserializeFromString(WorkflowMarkupSerializationManager serializationManager, Type propertyType, string value) { List<Parameter> paramList = new List<Parameter>(); 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(); } Parameter parameter = new Parameter(); parameter.Name = paramValues[0]; switch(paramValues[1]) { case "Integer": parameter.Type = ParameterType.Integer; break; case "DateTime": parameter.Type = ParameterType.DateTime; break; case "String": parameter.Type = ParameterType.String; break; } paramList.Add(parameter); } } return paramList; } #region IDesignerSerializationProvider Members public object GetSerializer(IDesignerSerializationManager manager, object currentSerializer, Type objectType, Type serializerType) { if (objectType == typeof(List<Parameter>)) { return this; } else { return null; } } #endregion } And then add the following attribute to the DynamicPropertiesActivity 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 | ||