Пример #1
0
        /// <summary>
        /// Writes this record and any contained records to the supplied byte
        /// array.
        /// </summary>
        /// <param name="offset"></param>
        /// <param name="data"></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);

            LittleEndian.PutShort(data, offset, Options);
            LittleEndian.PutShort(data, offset + 2, RecordId);
            int remainingBytes = thedata.Length;

            for (IEnumerator iterator = ChildRecords.GetEnumerator(); iterator.MoveNext();)
            {
                EscherRecord r = (EscherRecord)iterator.Current;
                remainingBytes += r.RecordSize;
            }
            LittleEndian.PutInt(data, offset + 4, remainingBytes);
            Array.Copy(thedata, 0, data, offset + 8, thedata.Length);
            int pos = offset + 8 + thedata.Length;

            for (IEnumerator iterator = ChildRecords.GetEnumerator(); iterator.MoveNext();)
            {
                EscherRecord r = (EscherRecord)iterator.Current;
                pos += r.Serialize(pos, data);
            }

            listener.AfterRecordSerialize(pos, RecordId, pos - offset, this);
            return(pos - offset);
        }