示例#1
0
        private void ReadObject(BinaryElement element, BinaryReader reader, out long objectId, out object value, out SerializationInfo info)
        {
            switch (element)
            {
            case BinaryElement.RefTypeObject:
                this.ReadRefTypeObjectInstance(reader, out objectId, out value, out info);
                return;

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

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

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

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

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

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

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

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

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

            case BinaryElement.ArrayFiller8b:
                value    = new ObjectReader.ArrayNullFiller((int)reader.ReadByte());
                objectId = 0L;
                info     = null;
                return;

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

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

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

            case BinaryElement.ArrayOfString:
                this.ReadArrayOfString(reader, out objectId, out value);
                info = null;
                return;
            }
            throw new SerializationException("Unexpected binary element: " + (int)element);
        }