private IMPArray DecodeMPArray(ByteArray buffer)
        {
            IMPArray   array = MPArray.NewInstance();
            MPDataType type  = (MPDataType)Convert.ToInt32(buffer.ReadByte());

            if (type != MPDataType.MP_ARRAY)
            {
                throw new Exception(string.Concat("Invalid MPDataType. Expected: ", MPDataType.MP_ARRAY, ", found: ", type));
            }
            int num = buffer.ReadShort();

            if (num < 0)
            {
                throw new Exception("Can't decode MPArray. Size is negative: " + num);
            }
            for (int i = 0; i < num; i++)
            {
                MPDataWrapper val = DecodeObject(buffer);
                if (val == null)
                {
                    throw new Exception("Could not decode SFSArray item at index: " + i);
                }
                array.Add(val);
            }
            return(array);
        }
        private IMPArray UnrollCollection(ICollection collection)
        {
            IMPArray array = MPArray.NewInstance();

            foreach (object item in collection)
            {
                array.Add(WrapField(item));
            }
            return(array);
        }
        private IMPArray UnrollArray(object[] arr)
        {
            IMPArray array = MPArray.NewInstance();

            foreach (object item in arr)
            {
                array.Add(WrapField(item));
            }
            return(array);
        }