Exemplo n.º 1
0
		// Reads an object from the stream. The object is registered in the ObjectManager.
		// The result can be either the object instance
		// or the id of the object (when what is found in the stream is an object reference).
		// If an object instance is read, the objectId is set to 0.
		
		private void ReadObject (BinaryElement element, BinaryReader reader, out long objectId, out object value, out SerializationInfo info)
		{
			switch (element)
			{
				case BinaryElement.RefTypeObject:
					ReadRefTypeObjectInstance (reader, out objectId, out value, out info);
					break;

				case BinaryElement.UntypedRuntimeObject:
					ReadObjectInstance (reader, true, false, out objectId, out value, out info);
					break;

				case BinaryElement.UntypedExternalObject:
					ReadObjectInstance (reader, false, false, out objectId, out value, out info);
					break;

				case BinaryElement.RuntimeObject:
					ReadObjectInstance (reader, true, true, out objectId, out value, out info);
					break;

				case BinaryElement.ExternalObject:
					ReadObjectInstance (reader, false, true, out objectId, out value, out info);
					break;

				case BinaryElement.String:
					info = null;
					ReadStringIntance (reader, out objectId, out value);
					break;

				case BinaryElement.GenericArray:
					info = null;
					ReadGenericArray (reader, out objectId, out value);
					break;


				case BinaryElement.BoxedPrimitiveTypeValue:
					value = ReadBoxedPrimitiveTypeValue (reader);
					objectId = 0;
					info = null;
					break;

				case BinaryElement.NullValue:
					value = null;
					objectId = 0;
					info = null;
					break;

				case BinaryElement.Assembly:
					ReadAssembly (reader);
					ReadObject ((BinaryElement)reader.ReadByte (), reader, out objectId, out value, out info);
					break;

				case BinaryElement.ArrayFiller8b:
					value = new ArrayNullFiller(reader.ReadByte());
					objectId = 0;
					info = null;
					break;

				case BinaryElement.ArrayFiller32b:
					value = new ArrayNullFiller(reader.ReadInt32());
					objectId = 0;
					info = null;
					break;

				case BinaryElement.ArrayOfPrimitiveType:
					ReadArrayOfPrimitiveType (reader, out objectId, out value);
					info = null;
					break;

				case BinaryElement.ArrayOfObject:
					ReadArrayOfObject (reader, out objectId, out value);
					info = null;
					break;

				case BinaryElement.ArrayOfString:
					ReadArrayOfString (reader, out objectId, out value);
					info = null;
					break;

				default:
					throw new SerializationException ("Unexpected binary element: " + (int)element);
			}
		}
Exemplo n.º 2
0
        // Reads an object from the stream. The object is registered in the ObjectManager.
        // The result can be either the object instance
        // or the id of the object (when what is found in the stream is an object reference).
        // If an object instance is read, the objectId is set to 0.

        private void ReadObject(BinaryElement element, BinaryReader reader, out long objectId, out object value, out SerializationInfo info)
        {
            switch (element)
            {
            case BinaryElement.RefTypeObject:
                ReadRefTypeObjectInstance(reader, out objectId, out value, out info);
                break;

            case BinaryElement.UntypedRuntimeObject:
                ReadObjectInstance(reader, true, false, out objectId, out value, out info);
                break;

            case BinaryElement.UntypedExternalObject:
                ReadObjectInstance(reader, false, false, out objectId, out value, out info);
                break;

            case BinaryElement.RuntimeObject:
                ReadObjectInstance(reader, true, true, out objectId, out value, out info);
                break;

            case BinaryElement.ExternalObject:
                ReadObjectInstance(reader, false, true, out objectId, out value, out info);
                break;

            case BinaryElement.String:
                info = null;
                ReadStringIntance(reader, out objectId, out value);
                break;

            case BinaryElement.GenericArray:
                info = null;
                ReadGenericArray(reader, out objectId, out value);
                break;


            case BinaryElement.BoxedPrimitiveTypeValue:
                value    = ReadBoxedPrimitiveTypeValue(reader);
                objectId = 0;
                info     = null;
                break;

            case BinaryElement.NullValue:
                value    = null;
                objectId = 0;
                info     = null;
                break;

            case BinaryElement.Assembly:
                ReadAssembly(reader);
                ReadObject((BinaryElement)reader.ReadByte(), reader, out objectId, out value, out info);
                break;

            case BinaryElement.ArrayFiller8b:
                value    = new ArrayNullFiller(reader.ReadByte());
                objectId = 0;
                info     = null;
                break;

            case BinaryElement.ArrayFiller32b:
                value    = new ArrayNullFiller(reader.ReadInt32());
                objectId = 0;
                info     = null;
                break;

            case BinaryElement.ArrayOfPrimitiveType:
                ReadArrayOfPrimitiveType(reader, out objectId, out value);
                info = null;
                break;

            case BinaryElement.ArrayOfObject:
                ReadArrayOfObject(reader, out objectId, out value);
                info = null;
                break;

            case BinaryElement.ArrayOfString:
                ReadArrayOfString(reader, out objectId, out value);
                info = null;
                break;

            default:
                throw new SerializationException("Unexpected binary element: " + (int)element);
            }
        }