public void GetObjectData(object obj, SerializationInfo info, StreamingContext context) { info.AddValue("type", obj.GetType()); string[] names = null; MemberInfo[] serializableMembers = FormatterServicesNoSerializableCheck.GetSerializableMembers(obj.GetType(), out names); object[] objectData = FormatterServices.GetObjectData(obj, serializableMembers); info.AddValue("memberDatas", objectData); info.SetType(typeof(ObjectSerializedRef)); }
void IDeserializationCallback.OnDeserialization(object sender) { if (this.returnedObject != null) { string[] names = null; MemberInfo[] members = FormatterServicesNoSerializableCheck.GetSerializableMembers(this.type, out names); FormatterServices.PopulateObjectMembers(this.returnedObject, members, this.memberDatas); this.returnedObject = null; } }
void IDeserializationCallback.OnDeserialization(object sender) { if (this.cachedActivity != null) { bool done = false; string[] currentMemberNames = null; MemberInfo[] members = FormatterServicesNoSerializableCheck.GetSerializableMembers(this.cachedActivity.GetType(), out currentMemberNames); if (members.Length == 2) { Debug.Assert(members[0].Name == "dependencyPropertyValues" && members[1].Name == "disposed"); // To improve performance, we specialize the case where there are only 2 fields. One is the // instance dependency property values dictionary and the other is the "disposed" event. if (this.memberData != null && this.disposed != null) { FormatterServices.PopulateObjectMembers(this.cachedActivity, members, new object[] { this.memberData, this.disposed }); done = true; } else if (this.memberData != null) { FormatterServices.PopulateObjectMembers(this.cachedActivity, new MemberInfo[] { members[0] }, new object[] { this.memberData }); done = true; } else if (this.disposed != null) { FormatterServices.PopulateObjectMembers(this.cachedActivity, new MemberInfo[] { members[1] }, new object[] { this.disposed }); done = true; } } if (!done && this.memberDatas != null) { // re-order the member datas if needed Object[] currentMemberDatas = new object[members.Length]; for (int index = 0; index < currentMemberNames.Length; index++) { currentMemberDatas[index] = this.memberDatas[Position(currentMemberNames[index])]; } // populate the object FormatterServices.PopulateObjectMembers(this.cachedActivity, members, currentMemberDatas); } this.cachedActivity.FixUpMetaProperties(this.cachedDefinitionActivity); this.cachedActivity = null; } }
public void GetObjectData(object obj, SerializationInfo info, StreamingContext context) { // We only use ObjectSurrogate for ActivityBind and DependecyObject if (!AppSettings.DisableActivitySurrogateSelectorTypeCheck && !(obj is ActivityBind) && !(obj is DependencyObject) ) { throw new ArgumentException("obj"); } info.AddValue("type", obj.GetType()); string[] names = null; MemberInfo[] members = FormatterServicesNoSerializableCheck.GetSerializableMembers(obj.GetType(), out names); object[] memberDatas = FormatterServices.GetObjectData(obj, members); info.AddValue("memberDatas", memberDatas); info.SetType(typeof(ObjectSerializedRef)); }
void IDeserializationCallback.OnDeserialization(object sender) { if (this.returnedObject != null) { // We only use ObjectSurrogate for ActivityBind and DependecyObject if (!AppSettings.DisableActivitySurrogateSelectorTypeCheck && !(typeof(ActivityBind).IsAssignableFrom(type)) && !(typeof(DependencyObject).IsAssignableFrom(type)) && !(this.returnedObject is ActivityBind) && !(this.returnedObject is DependencyObject) ) { throw new ArgumentException("context"); } string[] names = null; MemberInfo[] members = FormatterServicesNoSerializableCheck.GetSerializableMembers(this.type, out names); FormatterServices.PopulateObjectMembers(this.returnedObject, members, this.memberDatas); this.returnedObject = null; } }
void IDeserializationCallback.OnDeserialization(object sender) { if (this.cachedActivity != null) { bool flag = false; string[] names = null; MemberInfo[] serializableMembers = FormatterServicesNoSerializableCheck.GetSerializableMembers(this.cachedActivity.GetType(), out names); if (serializableMembers.Length == 2) { if ((this.memberData != null) && (this.disposed != null)) { FormatterServices.PopulateObjectMembers(this.cachedActivity, serializableMembers, new object[] { this.memberData, this.disposed }); flag = true; } else if (this.memberData != null) { FormatterServices.PopulateObjectMembers(this.cachedActivity, new MemberInfo[] { serializableMembers[0] }, new object[] { this.memberData }); flag = true; } else if (this.disposed != null) { FormatterServices.PopulateObjectMembers(this.cachedActivity, new MemberInfo[] { serializableMembers[1] }, new object[] { this.disposed }); flag = true; } } if (!flag && (this.memberDatas != null)) { object[] data = new object[serializableMembers.Length]; for (int i = 0; i < names.Length; i++) { data[i] = this.memberDatas[this.Position(names[i])]; } FormatterServices.PopulateObjectMembers(this.cachedActivity, serializableMembers, data); } this.cachedActivity.FixUpMetaProperties(this.cachedDefinitionActivity); this.cachedActivity = null; } }
public void GetObjectData(object obj, SerializationInfo info, StreamingContext context) { if (Activity.ContextIdToActivityMap == null) { throw new InvalidOperationException(SR.GetString(SR.Error_ActivitySaveLoadNotCalled)); } Activity activity = (Activity)obj; bool isSurroundingActivity = false; bool isDanglingActivity = IsDanglingActivity(activity, out isSurroundingActivity); if (isSurroundingActivity) { // if this object is in parent chain then replace it with token if (activity.ContextActivity != null) { info.AddValue("cid", activity.ContextId); } info.AddValue("id", activity.DottedPath); info.SetType(typeof(ActivityRef)); } else if (!isDanglingActivity) { info.AddValue("id", activity.DottedPath); string[] names = null; MemberInfo[] members = FormatterServicesNoSerializableCheck.GetSerializableMembers(obj.GetType(), out names); object[] memberDatas = FormatterServices.GetObjectData(obj, members); // To improve performance, we specialize the case where there are only 2 fields. One is the // instance dependency property values dictionary and the other is the "disposed" event. if (memberDatas != null && memberDatas.Length == 2) { Debug.Assert(members[0].Name == "dependencyPropertyValues" && members[1].Name == "disposed"); IDictionary <DependencyProperty, object> instanceProperties = (IDictionary <DependencyProperty, object>)memberDatas[0]; if (instanceProperties != null && instanceProperties.Count > 0) { foreach (KeyValuePair <DependencyProperty, object> kvp in instanceProperties) { if (kvp.Key != null && !kvp.Key.DefaultMetadata.IsNonSerialized) { info.AddValue("memberData", memberDatas[0]); break; } } } if (memberDatas[1] != null) { info.AddValue("disposed", memberDatas[1]); } } else { info.AddValue("memberNames", names); info.AddValue("memberDatas", memberDatas); } // for root activity serialize the change actions if there are any if (obj is Activity && ((Activity)obj).Parent == null) { string wMarkup = activity.GetValue(Activity.WorkflowXamlMarkupProperty) as string; if (!string.IsNullOrEmpty(wMarkup)) { info.AddValue("workflowMarkup", wMarkup); //if we got rules in XAML Load case, serialize them as well string rMarkup = activity.GetValue(Activity.WorkflowRulesMarkupProperty) as string; if (!string.IsNullOrEmpty(rMarkup)) { info.AddValue("rulesMarkup", rMarkup); } } else { info.AddValue("type", activity.GetType()); } Activity workflowDefinition = (Activity)activity.GetValue(Activity.WorkflowDefinitionProperty); if (workflowDefinition != null) { ArrayList changeActions = (ArrayList)workflowDefinition.GetValue(WorkflowChanges.WorkflowChangeActionsProperty); if (changeActions != null) { Guid changeVersion = (Guid)workflowDefinition.GetValue(WorkflowChanges.WorkflowChangeVersionProperty); info.AddValue("workflowChangeVersion", changeVersion); using (StringWriter changeActionsStringWriter = new StringWriter(CultureInfo.InvariantCulture)) { using (XmlWriter xmlWriter = Design.Helpers.CreateXmlWriter(changeActionsStringWriter)) { new WorkflowMarkupSerializer().Serialize(xmlWriter, changeActions); info.AddValue("workflowChanges", changeActionsStringWriter.ToString()); } } } } } info.SetType(typeof(ActivitySerializedRef)); } else { info.AddValue("id", activity.Name); info.AddValue("type", activity.GetType()); info.SetType(typeof(DanglingActivityRef)); } }
public void GetObjectData(object obj, SerializationInfo info, StreamingContext context) { if (Activity.ContextIdToActivityMap == null) { throw new InvalidOperationException(SR.GetString("Error_ActivitySaveLoadNotCalled")); } Activity activity = (Activity)obj; bool isSurrounding = false; bool flag2 = this.IsDanglingActivity(activity, out isSurrounding); if (isSurrounding) { if (activity.ContextActivity != null) { info.AddValue("cid", activity.ContextId); } info.AddValue("id", activity.DottedPath); info.SetType(typeof(ActivityRef)); } else if (flag2) { info.AddValue("id", activity.Name); info.AddValue("type", activity.GetType()); info.SetType(typeof(DanglingActivityRef)); } else { info.AddValue("id", activity.DottedPath); string[] names = null; MemberInfo[] serializableMembers = FormatterServicesNoSerializableCheck.GetSerializableMembers(obj.GetType(), out names); object[] objectData = FormatterServices.GetObjectData(obj, serializableMembers); if ((objectData == null) || (objectData.Length != 2)) { info.AddValue("memberNames", names); info.AddValue("memberDatas", objectData); } else { IDictionary <DependencyProperty, object> dictionary = (IDictionary <DependencyProperty, object>)objectData[0]; if ((dictionary != null) && (dictionary.Count > 0)) { foreach (KeyValuePair <DependencyProperty, object> pair in dictionary) { if ((pair.Key != null) && !pair.Key.DefaultMetadata.IsNonSerialized) { info.AddValue("memberData", objectData[0]); break; } } } if (objectData[1] != null) { info.AddValue("disposed", objectData[1]); } } if ((obj is Activity) && (((Activity)obj).Parent == null)) { string str = activity.GetValue(Activity.WorkflowXamlMarkupProperty) as string; if (!string.IsNullOrEmpty(str)) { info.AddValue("workflowMarkup", str); string str2 = activity.GetValue(Activity.WorkflowRulesMarkupProperty) as string; if (!string.IsNullOrEmpty(str2)) { info.AddValue("rulesMarkup", str2); } } else { info.AddValue("type", activity.GetType()); } Activity activity2 = (Activity)activity.GetValue(Activity.WorkflowDefinitionProperty); if (activity2 != null) { ArrayList list = (ArrayList)activity2.GetValue(WorkflowChanges.WorkflowChangeActionsProperty); if (list != null) { Guid guid = (Guid)activity2.GetValue(WorkflowChanges.WorkflowChangeVersionProperty); info.AddValue("workflowChangeVersion", guid); using (StringWriter writer = new StringWriter(CultureInfo.InvariantCulture)) { using (XmlWriter writer2 = Helpers.CreateXmlWriter(writer)) { new WorkflowMarkupSerializer().Serialize(writer2, list); info.AddValue("workflowChanges", writer.ToString()); } } } } } info.SetType(typeof(ActivitySerializedRef)); } }