public override byte[] Serialize()
{
List<byte> listByte = new List<byte>();
listByte.AddRange(BitConverter.GetBytes(this.Reserved));
listByte.AddRange(BitConverter.GetBytes(this.HasState));
if (this.HasState)
{
listByte.AddRange(this.State.Serialize());
}
listByte.AddRange(BitConverter.GetBytes(this.HasTarget));
if (this.HasTarget)
{
listByte.AddRange(this.Target.PropTag.Serialize());
// According to the product behavior, string or binary buffer start with "FF".
listByte.Add(0xFF);
listByte.AddRange(this.Target.Value);
}
listByte.AddRange(BitConverter.GetBytes(this.HasExplicitTable));
if (this.HasExplicitTable)
{
listByte.AddRange(BitConverter.GetBytes(this.ExplicitableCount));
for (int i = 0; i < this.ExplicitableCount; i++)
{
listByte.AddRange(BitConverter.GetBytes(this.ExplicitTable[i]));
}
}
listByte.AddRange(BitConverter.GetBytes(this.HasColumns));
if (this.HasColumns)
{
listByte.AddRange(BitConverter.GetBytes(this.Columns.PropertyTagCount));
for (int i = 0; i < this.Columns.PropertyTagCount; i++)
{
listByte.AddRange(this.Columns.PropertyTags[i].Serialize());
}
}
listByte.AddRange(BitConverter.GetBytes(this.AuxiliaryBufferSize));
listByte.AddRange(this.AuxiliaryBuffer);
return listByte.ToArray();
}
}