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;
     }
 }
Example #3
0
            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;
                }
            }
Example #4
0
            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));
            }
Example #5
0
 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;
     }
 }
Example #6
0
 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;
     }
 }
Example #7
0
        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));
            }
        }
Example #8
0
        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));
            }
        }