public void Read(BinaryParser input) { // binaryHeaderEnum has already been read _objectId = input.ReadInt32(); _name = input.ReadString(); _numMembers = input.ReadInt32(); _memberNames = new string[_numMembers]; _binaryTypeEnumA = new BinaryTypeEnum[_numMembers]; _typeInformationA = new object[_numMembers]; _memberAssemIds = new int[_numMembers]; for (int i = 0; i < _numMembers; i++) { _memberNames[i] = input.ReadString(); } for (int i = 0; i < _numMembers; i++) { _binaryTypeEnumA[i] = (BinaryTypeEnum)input.ReadByte(); } for (int i = 0; i < _numMembers; i++) { if (_binaryTypeEnumA[i] != BinaryTypeEnum.ObjectUrt && _binaryTypeEnumA[i] != BinaryTypeEnum.ObjectUser) { _typeInformationA[i] = BinaryTypeConverter.ReadTypeInfo(_binaryTypeEnumA[i], input, out _memberAssemIds[i]); } else { BinaryTypeConverter.ReadTypeInfo(_binaryTypeEnumA[i], input, out _memberAssemIds[i]); } } if (_binaryHeaderEnum == BinaryHeaderEnum.ObjectWithMapTypedAssemId) { _assemId = input.ReadInt32(); } }
public void Write(BinaryFormatterWriter output) { 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 BinaryTypeConverterTests() { PrimitiveTypeConverter converter = new BinaryTypeConverter(); Type temp = BinaryTypeConverter.BinaryType; BinaryTypeConverter.BinaryType = typeof(System.Data.Linq.Binary); try { Assert.AreEqual(new System.Data.Linq.Binary(new byte[] { 0, 1, 2, 3 }), (System.Data.Linq.Binary)converter.Parse("AAECAw==")); Assert.AreEqual("\"AAECAw==\"", converter.ToString(new System.Data.Linq.Binary(new byte[] { 0, 1, 2, 3 }))); } finally { BinaryTypeConverter.BinaryType = temp; } }
public void Write(BinaryFormatterWriter output) { 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)) { for (int i = 0; i < _rank; i++) { output.WriteInt32(_lowerBoundA[i]); } } output.WriteByte((byte)_binaryTypeEnum); BinaryTypeConverter.WriteTypeInfo(_binaryTypeEnum, _typeInformation, _assemId, output); break; } }
internal ObjectMap(string objectName, Type objectType, string[] memberNames, ObjectReader objectReader, int objectId, BinaryAssemblyInfo assemblyInfo) { _objectName = objectName; _objectType = objectType; _memberNames = memberNames; _objectReader = objectReader; _objectId = objectId; _assemblyInfo = assemblyInfo; _objectInfo = objectReader.CreateReadObjectInfo(objectType); _memberTypes = _objectInfo.GetMemberTypes(memberNames, objectType); _binaryTypeEnumA = new BinaryTypeEnum[_memberTypes.Length]; _typeInformationA = new object[_memberTypes.Length]; for (int i = 0; i < _memberTypes.Length; i++) { object typeInformation = null; BinaryTypeEnum binaryTypeEnum = BinaryTypeConverter.GetParserBinaryTypeInfo(_memberTypes[i], out typeInformation); _binaryTypeEnumA[i] = binaryTypeEnum; _typeInformationA[i] = typeInformation; } }
internal ObjectMap(string objectName, string[] memberNames, BinaryTypeEnum[] binaryTypeEnumA, object[] typeInformationA, int[] memberAssemIds, ObjectReader objectReader, int objectId, BinaryAssemblyInfo assemblyInfo, SizedArray assemIdToAssemblyTable) { _objectName = objectName; _memberNames = memberNames; _binaryTypeEnumA = binaryTypeEnumA; _typeInformationA = typeInformationA; _objectReader = objectReader; _objectId = objectId; _assemblyInfo = assemblyInfo; if (assemblyInfo == null) { throw new SerializationException(SR.Format(SR.Serialization_Assembly, objectName)); } _objectType = objectReader.GetType(assemblyInfo, objectName); _memberTypes = new Type[memberNames.Length]; for (int i = 0; i < memberNames.Length; i++) { InternalPrimitiveTypeE primitiveTypeEnum; string typeString; Type type; bool isVariant; BinaryTypeConverter.TypeFromInfo( binaryTypeEnumA[i], typeInformationA[i], objectReader, (BinaryAssemblyInfo)assemIdToAssemblyTable[memberAssemIds[i]], out primitiveTypeEnum, out typeString, out type, out isVariant); _memberTypes[i] = type; } _objectInfo = objectReader.CreateReadObjectInfo(_objectType, memberNames, null); if (!_objectInfo._isSi) { _objectInfo.GetMemberTypes(memberNames, _objectInfo._objectType); // Check version match } }
public void Read(BinaryParser input) { switch (_binaryHeaderEnum) { case BinaryHeaderEnum.ArraySinglePrimitive: _objectId = input.ReadInt32(); _lengthA = new int[1]; _lengthA[0] = input.ReadInt32(); _binaryArrayTypeEnum = BinaryArrayTypeEnum.Single; _rank = 1; _lowerBoundA = new int[_rank]; _binaryTypeEnum = BinaryTypeEnum.Primitive; _typeInformation = (InternalPrimitiveTypeE)input.ReadByte(); break; case BinaryHeaderEnum.ArraySingleString: _objectId = input.ReadInt32(); _lengthA = new int[1]; _lengthA[0] = input.ReadInt32(); _binaryArrayTypeEnum = BinaryArrayTypeEnum.Single; _rank = 1; _lowerBoundA = new int[_rank]; _binaryTypeEnum = BinaryTypeEnum.String; _typeInformation = null; break; case BinaryHeaderEnum.ArraySingleObject: _objectId = input.ReadInt32(); _lengthA = new int[1]; _lengthA[0] = input.ReadInt32(); _binaryArrayTypeEnum = BinaryArrayTypeEnum.Single; _rank = 1; _lowerBoundA = new int[_rank]; _binaryTypeEnum = BinaryTypeEnum.Object; _typeInformation = null; break; default: _objectId = input.ReadInt32(); _binaryArrayTypeEnum = (BinaryArrayTypeEnum)input.ReadByte(); _rank = input.ReadInt32(); _lengthA = new int[_rank]; _lowerBoundA = new int[_rank]; for (int i = 0; i < _rank; i++) { _lengthA[i] = input.ReadInt32(); } if ((_binaryArrayTypeEnum == BinaryArrayTypeEnum.SingleOffset) || (_binaryArrayTypeEnum == BinaryArrayTypeEnum.JaggedOffset) || (_binaryArrayTypeEnum == BinaryArrayTypeEnum.RectangularOffset)) { for (int i = 0; i < _rank; i++) { _lowerBoundA[i] = input.ReadInt32(); } } _binaryTypeEnum = (BinaryTypeEnum)input.ReadByte(); _typeInformation = BinaryTypeConverter.ReadTypeInfo(_binaryTypeEnum, input, out _assemId); break; } }