ReadMethodCall() public static method

public static ReadMethodCall ( BinaryElement elem, BinaryReader reader, bool hasHeaders, HeaderHandler headerHandler, BinaryFormatter formatter ) : object
elem BinaryElement
reader System.IO.BinaryReader
hasHeaders bool
headerHandler HeaderHandler
formatter BinaryFormatter
return object
        private object NoCheckDeserialize(Stream serializationStream, HeaderHandler handler)
        {
            if (serializationStream == null)
            {
                throw new ArgumentNullException("serializationStream");
            }
            if (serializationStream.CanSeek && serializationStream.Length == 0L)
            {
                throw new SerializationException("serializationStream supports seeking, but its length is 0");
            }
            BinaryReader binaryReader = new BinaryReader(serializationStream);
            bool         flag;

            this.ReadBinaryHeader(binaryReader, out flag);
            BinaryElement binaryElement = (BinaryElement)binaryReader.Read();

            if (binaryElement == BinaryElement.MethodCall)
            {
                return(MessageFormatter.ReadMethodCall(binaryElement, binaryReader, flag, handler, this));
            }
            if (binaryElement == BinaryElement.MethodResponse)
            {
                return(MessageFormatter.ReadMethodResponse(binaryElement, binaryReader, flag, handler, null, this));
            }
            ObjectReader objectReader = new ObjectReader(this);
            object       result;

            Header[] headers;
            objectReader.ReadObjectGraph(binaryElement, binaryReader, flag, out result, out headers);
            if (handler != null)
            {
                handler(headers);
            }
            return(result);
        }
示例#2
0
        // shared by Deserialize and UnsafeDeserialize which both involve different security checks
        private object NoCheckDeserialize(Stream serializationStream, HeaderHandler handler)
        {
            if (serializationStream == null)
            {
                throw new ArgumentNullException("serializationStream");
            }
            if (serializationStream.CanSeek &&
                serializationStream.Length == 0)
            {
                throw new SerializationException("serializationStream supports seeking, but its length is 0");
            }

            BinaryReader reader = new BinaryReader(serializationStream);

            bool hasHeader;

            ReadBinaryHeader(reader, out hasHeader);

            // Messages are read using a special static method, which does not use ObjectReader
            // if it is not needed. This saves time and memory.

            BinaryElement elem = (BinaryElement)reader.Read();

            if (elem == BinaryElement.MethodCall)
            {
                return(MessageFormatter.ReadMethodCall(elem, reader, hasHeader, handler, this));
            }
            else if (elem == BinaryElement.MethodResponse)
            {
                return(MessageFormatter.ReadMethodResponse(elem, reader, hasHeader, handler, null, this));
            }
            else
            {
                ObjectReader serializer = new ObjectReader(this);

                object   result;
                Header[] headers;
                serializer.ReadObjectGraph(elem, reader, hasHeader, out result, out headers);
                if (handler != null)
                {
                    handler(headers);
                }
                return(result);
            }
        }
        public static object ReadMethodCall(BinaryReader reader, bool hasHeaders, HeaderHandler headerHandler, BinaryFormatter formatter)
        {
            BinaryElement elem = (BinaryElement)reader.ReadByte();

            return(MessageFormatter.ReadMethodCall(elem, reader, hasHeaders, headerHandler, formatter));
        }