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