/// <summary>
        /// Writes the value of the <paramref name="member"/> to the stream.
        /// </summary>
        /// <param name="member">Must not be null.</param>
        /// <param name="writer">Must not be null.</param>
        private void WritePropertyValue(ObjectMemberData member, FileChunkWriter writer)
        {
            var value = member.GetValue(Instance);
            var type  = member.DataType;

            if (value != null)
            {
                switch (Type.GetTypeCode(type))
                {
                case TypeCode.Byte:
                    writer.WriteByte((byte)value);
                    break;

                case TypeCode.Char:
                    writer.WriteChar((char)value);
                    break;

                case TypeCode.Int16:
                    writer.WriteInt16((short)value);
                    break;

                case TypeCode.Int32:
                    writer.WriteInt32((int)value);
                    break;

                case TypeCode.Int64:
                    writer.WriteInt64((long)value);
                    break;

                case TypeCode.String:
                    writer.WriteString((string)value);
                    break;

                case TypeCode.UInt16:
                    writer.WriteUInt16((ushort)value);
                    break;

                case TypeCode.UInt32:
                    writer.WriteUInt32((uint)value);
                    break;

                case TypeCode.UInt64:
                    writer.WriteUInt64((ulong)value);
                    break;

                case TypeCode.Object:
                    WriteObjectValue(writer, value, type);
                    break;

                default:
                    throw new NotSupportedException();
                }
            }
        }