public byte[] Serialize()
{
// Set start index is 0
int index = 0;
byte[] serializeBuffer = new byte[this.Size()];
serializeBuffer[index++] = this.RopId;
serializeBuffer[index++] = this.LogonId;
serializeBuffer[index++] = this.InputHandleIndex;
serializeBuffer[index++] = this.OutputHandleIndex;
serializeBuffer[index++] = this.Level;
// 0 indicates start index
Array.Copy(BitConverter.GetBytes((uint)this.CopyFlags), 0, serializeBuffer, index, sizeof(uint));
// 4 indicates UInt32 bit occupies 4 bytes location
index += 4;
serializeBuffer[index++] = this.SendOptions;
Array.Copy(BitConverter.GetBytes((ushort)this.PropertyTagCount), 0, serializeBuffer, index, sizeof(ushort));
// 2 indicates UInt16 bit occupies 2 bytes location
index += 2;
for (int i = 0; i < this.PropertyTagCount; i++)
{
// 0 indicates start index
Array.Copy(this.PropertyTags[i].Serialize(), 0, serializeBuffer, index, this.PropertyTags[i].Size());
index += this.PropertyTags[i].Size();
}
return serializeBuffer;
}