protected override void SerializeToStream(CitpBinaryWriter writer)
        {
            base.SerializeToStream(writer);

            switch (Version)
            {
            case MsexVersion.Version1_0:
                writer.Write((byte)LibraryType);
                writer.Write(LibraryNumber);

                writer.Write(ThumbnailFormat.GetCustomAttribute <CitpId>().Id);

                writer.Write(ThumbnailWidth);
                writer.Write(ThumbnailHeight);
                writer.Write((ushort)ThumbnailBuffer.Length);
                writer.Write(ThumbnailBuffer);
                break;

            case MsexVersion.Version1_1:
            case MsexVersion.Version1_2:
                writer.Write((byte)LibraryType);

                if (!LibraryId.HasValue)
                {
                    throw new InvalidOperationException("LibraryId has no value. Required for MSEX V1.1 & V1.2");
                }

                writer.Write(LibraryId.Value.ToByteArray());

                writer.Write(ThumbnailFormat.GetCustomAttribute <CitpId>().Id);

                writer.Write(ThumbnailWidth);
                writer.Write(ThumbnailHeight);
                writer.Write((ushort)ThumbnailBuffer.Length);
                writer.Write(ThumbnailBuffer);
                break;
            }
        }
        protected override void SerializeToStream(CitpBinaryWriter writer)
        {
            base.SerializeToStream(writer);

            switch (Version)
            {
            case MsexVersion.Version1_0:
                writer.Write(ThumbnailFormat.GetCustomAttribute <CitpId>().Id);

                writer.Write(ThumbnailWidth);
                writer.Write(ThumbnailHeight);

                writer.Write((byte)ThumbnailFlags);

                writer.Write((byte)LibraryType);
                writer.Write(LibraryNumber);

                if (ShouldRequestAllThumbnails)
                {
                    writer.Write((byte)0x00);
                }
                else
                {
                    writer.Write((byte)ElementNumbers.Count);
                    foreach (byte e in ElementNumbers)
                    {
                        writer.Write(e);
                    }
                }
                break;

            case MsexVersion.Version1_1:
                writer.Write(ThumbnailFormat.GetCustomAttribute <CitpId>().Id);

                writer.Write(ThumbnailWidth);
                writer.Write(ThumbnailHeight);

                writer.Write((byte)ThumbnailFlags);

                writer.Write((byte)LibraryType);

                if (!LibraryId.HasValue)
                {
                    throw new InvalidOperationException("LibraryId has no value. Required for MSEX V1.1");
                }

                writer.Write(LibraryId.Value.ToByteArray());

                if (ShouldRequestAllThumbnails)
                {
                    writer.Write((byte)0x00);
                }
                else
                {
                    writer.Write((byte)ElementNumbers.Count);
                    foreach (byte e in ElementNumbers)
                    {
                        writer.Write(e);
                    }
                }
                break;

            case MsexVersion.Version1_2:
                writer.Write(ThumbnailFormat.GetCustomAttribute <CitpId>().Id);

                writer.Write(ThumbnailWidth);
                writer.Write(ThumbnailHeight);

                writer.Write((byte)ThumbnailFlags);

                writer.Write((byte)LibraryType);

                if (!LibraryId.HasValue)
                {
                    throw new InvalidOperationException("LibraryId has no value. Required for MSEX V1.2");
                }

                writer.Write(LibraryId.Value.ToByteArray());

                if (ShouldRequestAllThumbnails)
                {
                    writer.Write((ushort)0x0000);
                }
                else
                {
                    writer.Write((ushort)ElementNumbers.Count);
                    foreach (byte e in ElementNumbers)
                    {
                        writer.Write(e);
                    }
                }
                break;
            }
        }
        protected override void SerializeToStream(CitpBinaryWriter writer)
        {
            base.SerializeToStream(writer);

            switch (Version)
            {
            case MsexVersion.Version1_0:
                writer.Write(ThumbnailFormat.GetCustomAttribute <CitpId>().Id);
                writer.Write(ThumbnailWidth);
                writer.Write(ThumbnailHeight);

                writer.Write((byte)ThumbnailFlags);

                writer.Write((byte)LibraryType);

                if (ShouldRequestAllThumbnails)
                {
                    writer.Write((byte)0x00);
                }
                else
                {
                    writer.Write((byte)LibraryIds.Count);
                    foreach (var l in LibraryIds)
                    {
                        writer.Write(l.ToByteArray());
                    }
                }
                break;

            case MsexVersion.Version1_1:
                writer.Write(ThumbnailFormat.GetCustomAttribute <CitpId>().Id);
                writer.Write(ThumbnailWidth);
                writer.Write(ThumbnailHeight);

                writer.Write((byte)ThumbnailFlags);

                writer.Write((byte)LibraryType);

                if (ShouldRequestAllThumbnails)
                {
                    writer.Write((byte)0x00);
                }
                else
                {
                    writer.Write((byte)LibraryIds.Count);
                    foreach (var l in LibraryIds)
                    {
                        writer.Write(l.ToByteArray());
                    }
                }
                break;

            case MsexVersion.Version1_2:
                writer.Write(ThumbnailFormat.GetCustomAttribute <CitpId>().Id);
                writer.Write(ThumbnailWidth);
                writer.Write(ThumbnailHeight);

                writer.Write((byte)ThumbnailFlags);

                writer.Write((byte)LibraryType);

                if (ShouldRequestAllThumbnails)
                {
                    writer.Write((ushort)0x0000);
                }
                else
                {
                    writer.Write((ushort)LibraryIds.Count);
                    foreach (var l in LibraryIds)
                    {
                        writer.Write(l.ToByteArray());
                    }
                }
                break;
            }
        }