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); } }
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(); } }
public void Write(BinaryFormatterWriter output) { output.WriteByte((byte)BinaryHeaderEnum.Assembly); output.WriteInt32(_assemId); Debug.Assert(_assemblyString != null); output.WriteString(_assemblyString); }
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(); }
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(); }
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); }
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; } }
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); } }
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; }
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; }
// 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())); } }
// 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())); } }