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); }
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); }