Exemplo n.º 1
0
        /// <summary>
        /// Starts reading an reference that was written with <see cref="StartWrite"/>.
        /// </summary>
        /// <returns></returns>
        public ObjectReference StartRead()
        {
            var name = ReadLine();

            int line = m_currentLine;

            var serializationType = (SerializationType)Enum.Parse(typeof(SerializationType), ReadLine());
            var objReference      = new ObjectReference(name, serializationType);

            if (serializationType > SerializationType.ReferenceTypes)
            {
                ObjectReferences.Add(line, objReference);
            }

            switch (serializationType)
            {
            case SerializationType.Null: break;

            case SerializationType.Reference: ReadReference(objReference); break;

            case SerializationType.Object: ReadObject(objReference); break;

            case SerializationType.Array: ReadArray(objReference); break;

            case SerializationType.GenericEnumerable: ReadGenericEnumerable(objReference); break;

            case SerializationType.Enumerable: ReadEnumerable(objReference); break;

            case SerializationType.Enum: ReadEnum(objReference); break;

            case SerializationType.Any: ReadAny(objReference); break;

            case SerializationType.String: ReadString(objReference); break;

            case SerializationType.MemberInfo: ReadMemberInfo(objReference); break;

            case SerializationType.Type: ReadType(objReference); break;

            case SerializationType.Delegate: ReadDelegate(objReference); break;

            case SerializationType.IntPtr: ReadIntPtr(objReference); break;

            case SerializationType.UnusedMarker: ReadUnusedMarker(objReference); break;
            }

#if !(RELEASE && RELEASE_DISABLE_CHECKS)
            if (!objReference.AllowNull && objReference.Value == null && serializationType != SerializationType.Null)
            {
                throw new SerializationException(string.Format("Failed to deserialize object of type {0} {1} at line {2}!", objReference.SerializationType, objReference.Name, line));
            }
#endif

            return(objReference);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Checks if this object has already been serialized.
        /// </summary>
        /// <param name="objectReference"></param>
        /// <returns>true if object had already been serialized.</returns>
        bool TryWriteReference(ObjectReference objectReference)
        {
            if (objectReference.SerializationType > SerializationType.ReferenceTypes)
            {
                foreach (var pair in ObjectReferences)
                {
                    if (pair.Value.Value.Equals(objectReference.Value))
                    {
                        WriteReference(objectReference, pair.Key);
                        return(true);
                    }
                }

                ObjectReferences.Add(m_currentLine, objectReference);
            }

            return(false);
        }