/// <summary> /// This method Serializes this escher record into a byte array. /// </summary> /// <param name="offset">The offset into /// data to start writing the record data to</param> /// <param name="data">The byte array to Serialize to.</param> /// <param name="listener">a listener for begin and end serialization events.</param> /// <returns>The number of bytes written.</returns> public override int Serialize(int offset, byte[] data, EscherSerializationListener listener) { listener.BeforeRecordSerialize(offset, RecordId, this); if (_remainingData == null) { _remainingData = new byte[0]; } LittleEndian.PutShort(data, offset, Options); LittleEndian.PutShort(data, offset + 2, RecordId); if (_remainingData == null) { _remainingData = new byte[0]; } int blipSize = field_12_blipRecord == null ? 0 : field_12_blipRecord.RecordSize; int remainingBytes = _remainingData.Length + 36 + blipSize; LittleEndian.PutInt(data, offset + 4, remainingBytes); data[offset + 8] = field_1_blipTypeWin32; data[offset + 9] = field_2_blipTypeMacOS; for (int i = 0; i < 16; i++) { data[offset + 10 + i] = field_3_uid[i]; } LittleEndian.PutShort(data, offset + 26, field_4_tag); LittleEndian.PutInt(data, offset + 28, field_5_size); LittleEndian.PutInt(data, offset + 32, field_6_ref); LittleEndian.PutInt(data, offset + 36, field_7_offset); data[offset + 40] = field_8_usage; data[offset + 41] = field_9_name; data[offset + 42] = field_10_unused2; data[offset + 43] = field_11_unused3; int bytesWritten = 0; if (field_12_blipRecord != null) { bytesWritten = field_12_blipRecord.Serialize(offset + 44, data); } if (_remainingData == null) { _remainingData = new byte[0]; } Array.Copy(_remainingData, 0, data, offset + 44 + bytesWritten, _remainingData.Length); int pos = offset + 8 + 36 + _remainingData.Length + bytesWritten; listener.AfterRecordSerialize(pos, RecordId, pos - offset, this); return(pos - offset); }