Exemplo n.º 1
0
        public void Write(BinaryFormatterWriter output)
        {
            Debug.Assert(_name != null && _memberNames != null && _binaryTypeEnumA != null && _typeInformationA != null && _memberAssemIds != null);
            output.WriteByte((byte)_binaryHeaderEnum);
            output.WriteInt32(_objectId);
            output.WriteString(_name);

            output.WriteInt32(_numMembers);
            for (int i = 0; i < _numMembers; i++)
            {
                output.WriteString(_memberNames[i]);
            }
            for (int i = 0; i < _numMembers; i++)
            {
                output.WriteByte((byte)_binaryTypeEnumA[i]);
            }
            for (int i = 0; i < _numMembers; i++)
            {
                BinaryTypeConverter.WriteTypeInfo(_binaryTypeEnumA[i], _typeInformationA[i], _memberAssemIds[i], output);
            }

            if (_assemId > 0)
            {
                output.WriteInt32(_assemId);
            }
        }
Exemplo n.º 2
0
        public void Serialize(Stream serializationStream, object graph)
        {
            // don't refactor the 'throw' into a helper method; linker will have difficulty trimming
            if (!LocalAppContextSwitches.BinaryFormatterEnabled)
            {
                throw new NotSupportedException(SR.BinaryFormatter_SerializationDisallowed);
            }

            ArgumentNullException.ThrowIfNull(serializationStream);

            var formatterEnums = new InternalFE()
            {
                _typeFormat         = _typeFormat,
                _serializerTypeEnum = InternalSerializerTypeE.Binary,
                _assemblyFormat     = _assemblyFormat,
            };

            try
            {
                BinaryFormatterEventSource.Log.SerializationStart();
                var sow = new ObjectWriter(_surrogates, _context, formatterEnums, _binder);
                BinaryFormatterWriter binaryWriter = new BinaryFormatterWriter(serializationStream, sow, _typeFormat);
                sow.Serialize(graph, binaryWriter);
                _crossAppDomainArray = sow._crossAppDomainArray;
            }
            finally
            {
                BinaryFormatterEventSource.Log.SerializationStop();
            }
        }
Exemplo n.º 3
0
 public void Write(BinaryFormatterWriter output)
 {
     output.WriteByte((byte)BinaryHeaderEnum.Assembly);
     output.WriteInt32(_assemId);
     Debug.Assert(_assemblyString != null);
     output.WriteString(_assemblyString);
 }
Exemplo n.º 4
0
        internal void Serialize(object graph, BinaryFormatterWriter serWriter, bool fCheck)
        {
            if (graph == null)
            {
                throw new ArgumentNullException(nameof(graph));
            }
            if (serWriter == null)
            {
                throw new ArgumentNullException(nameof(serWriter));
            }

            _serWriter = serWriter;

            serWriter.WriteBegin();
            long   headerId = 0;
            object obj;
            long   objectId;
            bool   isNew;

            // allocations if methodCall or methodResponse and no graph
            _idGenerator        = new ObjectIDGenerator();
            _objectQueue        = new Queue <object>();
            _formatterConverter = new FormatterConverter();
            _serObjectInfoInit  = new SerObjectInfoInit();

            _topId   = InternalGetId(graph, false, null, out isNew);
            headerId = -1;
            WriteSerializedStreamHeader(_topId, headerId);

            _objectQueue.Enqueue(graph);
            while ((obj = GetNext(out objectId)) != null)
            {
                WriteObjectInfo objectInfo = null;

                // GetNext will return either an object or a WriteObjectInfo.
                // A WriteObjectInfo is returned if this object was member of another object
                if (obj is WriteObjectInfo)
                {
                    objectInfo = (WriteObjectInfo)obj;
                }
                else
                {
                    objectInfo          = WriteObjectInfo.Serialize(obj, _surrogates, _context, _serObjectInfoInit, _formatterConverter, this, _binder);
                    objectInfo._assemId = GetAssemblyId(objectInfo);
                }

                objectInfo._objectId = objectId;
                NameInfo typeNameInfo = TypeToNameInfo(objectInfo);
                Write(objectInfo, typeNameInfo, typeNameInfo);
                PutNameInfo(typeNameInfo);
                objectInfo.ObjectEnd();
            }

            serWriter.WriteSerializationHeaderEnd();
            serWriter.WriteEnd();

            // Invoke OnSerialized Event
            _objectManager.RaiseOnSerializedEvent();
        }
Exemplo n.º 5
0
        internal void Serialize(object graph, BinaryFormatterWriter serWriter, bool fCheck)
        {
            if (graph == null)
            {
                throw new ArgumentNullException(nameof(graph));
            }
            if (serWriter == null)
            {
                throw new ArgumentNullException(nameof(serWriter));
            }

            _serWriter = serWriter;

            serWriter.WriteBegin();
            long headerId = 0;
            object obj;
            long objectId;
            bool isNew;

            // allocations if methodCall or methodResponse and no graph
            _idGenerator = new ObjectIDGenerator();
            _objectQueue = new Queue<object>();
            _formatterConverter = new FormatterConverter();
            _serObjectInfoInit = new SerObjectInfoInit();

            _topId = InternalGetId(graph, false, null, out isNew);
            headerId = -1;
            WriteSerializedStreamHeader(_topId, headerId);

            _objectQueue.Enqueue(graph);
            while ((obj = GetNext(out objectId)) != null)
            {
                WriteObjectInfo objectInfo = null;

                // GetNext will return either an object or a WriteObjectInfo. 
                // A WriteObjectInfo is returned if this object was member of another object
                if (obj is WriteObjectInfo)
                {
                    objectInfo = (WriteObjectInfo)obj;
                }
                else
                {
                    objectInfo = WriteObjectInfo.Serialize(obj, _surrogates, _context, _serObjectInfoInit, _formatterConverter, this, _binder);
                    objectInfo._assemId = GetAssemblyId(objectInfo);
                }

                objectInfo._objectId = objectId;
                NameInfo typeNameInfo = TypeToNameInfo(objectInfo);
                Write(objectInfo, typeNameInfo, typeNameInfo);
                PutNameInfo(typeNameInfo);
                objectInfo.ObjectEnd();
            }

            serWriter.WriteSerializationHeaderEnd();
            serWriter.WriteEnd();

            // Invoke OnSerialized Event
            _objectManager.RaiseOnSerializedEvent();
        }
Exemplo n.º 6
0
 public void Write(BinaryFormatterWriter output)
 {
     _majorVersion = BinaryFormatterMajorVersion;
     _minorVersion = BinaryFormatterMinorVersion;
     output.WriteByte((byte)_binaryHeaderEnum);
     output.WriteInt32(_topId);
     output.WriteInt32(_headerId);
     output.WriteInt32(BinaryFormatterMajorVersion);
     output.WriteInt32(BinaryFormatterMinorVersion);
 }
Exemplo n.º 7
0
 public void Write(BinaryFormatterWriter output)
 {
     _majorVersion = BinaryFormatterMajorVersion;
     _minorVersion = BinaryFormatterMinorVersion;
     output.WriteByte((byte)_binaryHeaderEnum);
     output.WriteInt32(_topId);
     output.WriteInt32(_headerId);
     output.WriteInt32(BinaryFormatterMajorVersion);
     output.WriteInt32(BinaryFormatterMinorVersion);
 }
Exemplo n.º 8
0
        public void Write(BinaryFormatterWriter output)
        {
            Debug.Assert(_lengthA != null);
            switch (_binaryHeaderEnum)
            {
            case BinaryHeaderEnum.ArraySinglePrimitive:
                output.WriteByte((byte)_binaryHeaderEnum);
                output.WriteInt32(_objectId);
                output.WriteInt32(_lengthA[0]);
                output.WriteByte((byte)((InternalPrimitiveTypeE)_typeInformation !));
                break;

            case BinaryHeaderEnum.ArraySingleString:
                output.WriteByte((byte)_binaryHeaderEnum);
                output.WriteInt32(_objectId);
                output.WriteInt32(_lengthA[0]);
                break;

            case BinaryHeaderEnum.ArraySingleObject:
                output.WriteByte((byte)_binaryHeaderEnum);
                output.WriteInt32(_objectId);
                output.WriteInt32(_lengthA[0]);
                break;

            default:
                output.WriteByte((byte)_binaryHeaderEnum);
                output.WriteInt32(_objectId);
                output.WriteByte((byte)_binaryArrayTypeEnum);
                output.WriteInt32(_rank);
                for (int i = 0; i < _rank; i++)
                {
                    output.WriteInt32(_lengthA[i]);
                }
                if ((_binaryArrayTypeEnum == BinaryArrayTypeEnum.SingleOffset) ||
                    (_binaryArrayTypeEnum == BinaryArrayTypeEnum.JaggedOffset) ||
                    (_binaryArrayTypeEnum == BinaryArrayTypeEnum.RectangularOffset))
                {
                    Debug.Assert(_lowerBoundA != null);
                    for (int i = 0; i < _rank; i++)
                    {
                        output.WriteInt32(_lowerBoundA[i]);
                    }
                }
                output.WriteByte((byte)_binaryTypeEnum);
                BinaryTypeConverter.WriteTypeInfo(_binaryTypeEnum, _typeInformation, _assemId, output);
                break;
            }
        }
Exemplo n.º 9
0
        public void Write(BinaryFormatterWriter output)
        {
            Debug.Assert(_name != null && _memberNames != null);
            output.WriteByte((byte)_binaryHeaderEnum);
            output.WriteInt32(_objectId);
            output.WriteString(_name);

            output.WriteInt32(_numMembers);
            for (int i = 0; i < _numMembers; i++)
            {
                output.WriteString(_memberNames[i]);
            }

            if (_assemId > 0)
            {
                output.WriteInt32(_assemId);
            }
        }
Exemplo n.º 10
0
        internal void Serialize(Stream serializationStream, object graph, bool check)
        {
            if (serializationStream == null)
            {
                throw new ArgumentNullException(nameof(serializationStream));
            }

            var formatterEnums = new InternalFE()
            {
                _typeFormat = _typeFormat,
                _serializerTypeEnum = InternalSerializerTypeE.Binary,
                _assemblyFormat = _assemblyFormat,
            };

            var sow = new ObjectWriter(_surrogates, _context, formatterEnums, _binder);
            BinaryFormatterWriter binaryWriter = new BinaryFormatterWriter(serializationStream, sow, _typeFormat);
            sow.Serialize(graph, binaryWriter, check);
            _crossAppDomainArray = sow._crossAppDomainArray;
        }
Exemplo n.º 11
0
        internal void Serialize(Stream serializationStream, object graph, Header[] headers, bool check)
        {
            if (serializationStream == null)
            {
                throw new ArgumentNullException(nameof(serializationStream));
            }

            var formatterEnums = new InternalFE()
            {
                _typeFormat         = _typeFormat,
                _serializerTypeEnum = InternalSerializerTypeE.Binary,
                _assemblyFormat     = _assemblyFormat,
            };

            var sow = new ObjectWriter(_surrogates, _context, formatterEnums, _binder);
            BinaryFormatterWriter binaryWriter = new BinaryFormatterWriter(serializationStream, sow, _typeFormat);

            sow.Serialize(graph, headers, binaryWriter, check);
            _crossAppDomainArray = sow._crossAppDomainArray;
        }
Exemplo n.º 12
0
        // Writes the type information on the wire
        internal static void WriteTypeInfo(BinaryTypeEnum binaryTypeEnum, object?typeInformation, int assemId, BinaryFormatterWriter output)
        {
            switch (binaryTypeEnum)
            {
            case BinaryTypeEnum.Primitive:
            case BinaryTypeEnum.PrimitiveArray:
                Debug.Assert(typeInformation != null, "[BinaryConverter.WriteTypeInfo]typeInformation!=null");
                output.WriteByte((byte)((InternalPrimitiveTypeE)typeInformation));
                break;

            case BinaryTypeEnum.String:
            case BinaryTypeEnum.Object:
            case BinaryTypeEnum.StringArray:
            case BinaryTypeEnum.ObjectArray:
                break;

            case BinaryTypeEnum.ObjectUrt:
                Debug.Assert(typeInformation != null, "[BinaryConverter.WriteTypeInfo]typeInformation!=null");
                output.WriteString(typeInformation.ToString() !);
                break;

            case BinaryTypeEnum.ObjectUser:
                Debug.Assert(typeInformation != null, "[BinaryConverter.WriteTypeInfo]typeInformation!=null");
                output.WriteString(typeInformation.ToString() !);
                output.WriteInt32(assemId);
                break;

            default:
                throw new SerializationException(SR.Format(SR.Serialization_TypeWrite, binaryTypeEnum.ToString()));
            }
        }
Exemplo n.º 13
0
 // Writes the type information on the wire
 internal static void WriteTypeInfo(BinaryTypeEnum binaryTypeEnum, object typeInformation, int assemId, BinaryFormatterWriter output)
 {
     switch (binaryTypeEnum)
     {
         case BinaryTypeEnum.Primitive:
         case BinaryTypeEnum.PrimitiveArray:
             Debug.Assert(typeInformation != null, "[BinaryConverter.WriteTypeInfo]typeInformation!=null");
             output.WriteByte((byte)((InternalPrimitiveTypeE)typeInformation));
             break;
         case BinaryTypeEnum.String:
         case BinaryTypeEnum.Object:
         case BinaryTypeEnum.StringArray:
         case BinaryTypeEnum.ObjectArray:
             break;
         case BinaryTypeEnum.ObjectUrt:
             Debug.Assert(typeInformation != null, "[BinaryConverter.WriteTypeInfo]typeInformation!=null");
             output.WriteString(typeInformation.ToString());
             break;
         case BinaryTypeEnum.ObjectUser:
             Debug.Assert(typeInformation != null, "[BinaryConverter.WriteTypeInfo]typeInformation!=null");
             output.WriteString(typeInformation.ToString());
             output.WriteInt32(assemId);
             break;
         default:
             throw new SerializationException(SR.Format(SR.Serialization_TypeWrite, binaryTypeEnum.ToString()));
     }
 }