Ejemplo n.º 1
0
        private object RebuildObject(BaseGraphNode nodeToRebuild, Type requestedType)
        {
            var obj      = internal_RebuildObject(nodeToRebuild, requestedType);
            var callback = obj as IDeserializationCallback;

            if (callback != null)
            {
                m_deserializeCallbackRegist.Add(callback);
            }
            return(obj);
        }
Ejemplo n.º 2
0
        private object internal_RebuildObject(BaseGraphNode nodeToRebuild, Type requestedType)
        {
            if (nodeToRebuild == null)
            {
                return(null);
            }

            if (nodeToRebuild.DataType == SerializedDataType.Object)
            {
                //It may be a boxed formatted value
                var boxed     = nodeToRebuild as IObjectGraphNode;
                var boxedType = boxed.ObjectType;
                if (boxedType != null)
                {
                    var t = boxedType.ClassType;
                    var f = GetFormatter(t);
                    if (f != null)
                    {
                        //Is a boxed formatted value
                        if (boxed.NumOfFields == 1 && boxed.ContainsField(DEFAULT_BOXED_VALUE_FIELD_NAME))
                        {
                            nodeToRebuild = (BaseGraphNode)boxed[DEFAULT_BOXED_VALUE_FIELD_NAME];
                        }

                        return(f.GraphNodeToObject(nodeToRebuild, t));
                    }
                }
            }

            if (requestedType == null)
            {
                return(nodeToRebuild.ExtractObject(null));
            }

            var formatter = GetFormatter(requestedType);

            if (formatter == null)
            {
                return(nodeToRebuild.ExtractObject(requestedType));
            }

            var obj = formatter.GraphNodeToObject(nodeToRebuild, requestedType);

            if (nodeToRebuild.DataType == SerializedDataType.Object)
            {
                LinkObjectToNode((ObjectGraphNode)nodeToRebuild, obj);
            }
            return(obj);
        }