Esempio n. 1
0
        /// <summary>
        /// Reads map from input
        /// </summary>
        /// <param name="abstractHessianInput">Input stream</param>
        /// <returns>Read map or null</returns>
        public override object ReadMap(AbstractHessianInput abstractHessianInput)
        {
            IDictionary dictionary = null;

            if ((m_type == null) || (m_type.IsInterface && typeof(IDictionary).IsAssignableFrom(m_type)))
            {
                dictionary = new Hashtable();
            }
            else if (m_type.Equals(typeof(Hashtable)))
            {
                dictionary = new Hashtable();
            }
            else
            {
                dictionary = (IDictionary)Activator.CreateInstance(m_type);
                //dictionary = new Hashtable();
            }
            abstractHessianInput.AddRef(dictionary);
            while (!abstractHessianInput.IsEnd())
            {
                dictionary.Add(abstractHessianInput.ReadObject(), abstractHessianInput.ReadObject());
            }
            abstractHessianInput.ReadEnd();
            return(dictionary);
        }
Esempio n. 2
0
        /// <summary>
        /// Reads the array.
        /// </summary>
        /// <param name="abstractHessianInput">HessianInput</param>
        /// <param name="intLength">Length of data</param>
        /// <returns>Array data</returns>
        public override Object ReadList(AbstractHessianInput abstractHessianInput, int intLength)
        {
            if (intLength >= 0)
            {
                Object[] arrResult = createArray(intLength);

                abstractHessianInput.AddRef(arrResult);

                if (m_componentType != null)
                {
                    for (int i = 0; i < arrResult.Length; i++)
                    {
                        arrResult[i] = abstractHessianInput.ReadObject(m_componentType);
                    }
                }
                else
                {
                    for (int i = 0; i < arrResult.Length; i++)
                    {
                        arrResult[i] = abstractHessianInput.ReadObject();
                    }
                }

                abstractHessianInput.ReadListEnd();
                return(arrResult);
            }
            else
            {
                ArrayList colList = new ArrayList();
                abstractHessianInput.AddRef(colList);
                if (m_componentType != null)
                {
                    while (!abstractHessianInput.IsEnd())
                    {
                        colList.Add(abstractHessianInput.ReadObject(m_componentType));
                    }
                }
                else
                {
                    while (!abstractHessianInput.IsEnd())
                    {
                        colList.Add(abstractHessianInput.ReadObject());
                    }
                }

                abstractHessianInput.ReadListEnd();

                Object[] arrResult = createArray(colList.Count);
                for (int i = 0; i < arrResult.Length; i++)
                {
                    arrResult[i] = colList[i];
                }
                return(arrResult);
            }
        }
        public override object ReadMap(AbstractHessianInput abstractHessianInput)
        {
            string value = null;

            while (!abstractHessianInput.IsEnd())
            {
                string key = abstractHessianInput.ReadString();
                if (key.Equals("value"))
                {
                    value = abstractHessianInput.ReadString();
                }
                else
                {
                    abstractHessianInput.ReadObject();
                }
            }

            abstractHessianInput.ReadMapEnd();

            if (value == null)
            {
                return(null);
            }

            object obj = new System.Globalization.CultureInfo(value);

            abstractHessianInput.AddRef(obj);

            return(obj);
        }
Esempio n. 4
0
        private Object ReadGenericLengthList(AbstractHessianInput abstractHessianInput, int intListLength)
        {
            Type[] args     = m_type.GetGenericArguments();
            Type   itemType = args[0];
            Type   listType = null;

            if (m_type.Namespace.StartsWith("System") || m_type.IsInterface)
            {
                listType = typeof(System.Collections.Generic.List <>).MakeGenericType(itemType);
            }
            else
            {
                listType = m_type;
            }

            object list = Activator.CreateInstance(listType);

            abstractHessianInput.AddRef(list);

            while (intListLength > 0)
            {
                object item = abstractHessianInput.ReadObject(itemType);
                listType.InvokeMember("Add", BindingFlags.InvokeMethod, null, list, new object[] { item });
                intListLength--;
            }
            return(list);
        }
Esempio n. 5
0
        public override object ReadMap(AbstractHessianInput abstractHessianInput)
        {
            String name = null;

            while (!abstractHessianInput.IsEnd())
            {
                string key = abstractHessianInput.ReadString();

                if (key.Equals("name"))
                {
                    name = abstractHessianInput.ReadString();
                }
                else
                {
                    abstractHessianInput.ReadObject();
                }
            }

            abstractHessianInput.ReadMapEnd();

            if (name == null)
            {
                return(null);
            }

            Object obj = Enum.Parse(m_type, name);

            abstractHessianInput.AddRef(obj);

            return(obj);
        }
        public override object ReadMap(AbstractHessianInput abstractHessianInput)
        {
            string value = null;

            while (!abstractHessianInput.IsEnd())
            {
                string key = abstractHessianInput.ReadString();
                if (key.Equals("value"))
                {
                    value = abstractHessianInput.ReadString();
                }
                else
                {
                    abstractHessianInput.ReadObject();
                }
            }

            abstractHessianInput.ReadMapEnd();

            if (value == null)
            {
                return(null);
            }

            object obj = decimal.Parse(value);

            abstractHessianInput.AddRef(obj);

            return(obj);
        }
        /// <summary>
        /// Reads date
        /// </summary>
        /// <param name="abstractHessianInput">HessianInput - Instance</param>
        /// <param name="fields"></param>
        public override object ReadObject(AbstractHessianInput abstractHessianInput, object[] fields)
        {
            String[] fieldNames = (string[])fields;

            String value = null;

            for (int i = 0; i < fieldNames.Length; i++)
            {
                if ("value".Equals(fieldNames[i]))
                {
                    value = abstractHessianInput.ReadString();
                }
                else
                {
                    abstractHessianInput.ReadObject();
                }
            }
            if (value == null)
            {
                return(null);
            }

            object obj = decimal.Parse(value);

            abstractHessianInput.AddRef(obj);

            return(obj);
        }
Esempio n. 8
0
        /// <summary>
        /// Reads date
        /// </summary>
        /// <param name="abstractHessianInput">HessianInput - Instance</param>
        /// <param name="fields"></param>
        public override object ReadObject(AbstractHessianInput abstractHessianInput, object[] fields)
        {
            String[] fieldNames = (String[])fields;
            String   name       = null;

            for (int i = 0; i < fieldNames.Length; i++)
            {
                if ("name".Equals(fieldNames[i]))
                {
                    name = abstractHessianInput.ReadString();
                }
                else
                {
                    abstractHessianInput.ReadObject();
                }
            }

            if (name == null)
            {
                return(null);
            }

            Object obj = Enum.Parse(m_type, name);

            abstractHessianInput.AddRef(obj);

            return(obj);
        }
        public Object ReadObject(AbstractHessianInput abstractHessianInput, object obj, string[] fieldNames)
        {
            try
            {
                SerializationInfo serializationInfo = new SerializationInfo(m_type, new FormatterConverter());

                foreach (var fieldName in fieldNames)
                {
                    serializationInfo.AddValue(fieldName, abstractHessianInput.ReadObject());
                }

                obj = Instantiate(serializationInfo);

                int iref = abstractHessianInput.AddRef(obj);

                Object resolve = Resolve(abstractHessianInput, obj);

                if (obj != resolve)
                {
                    abstractHessianInput.SetRef(iref, resolve);
                }

                return(resolve);
            }
            catch (IOException)
            {
                throw;
            }
            catch (Exception e)
            {
                throw new CHessianException(obj.GetType().FullName + ":" + e, e);
            }
        }
        public Object ReadMap(AbstractHessianInput abstractHessianInput, Object obj)
        {
            try
            {
                int iref = abstractHessianInput.AddRef(obj);

                while (!abstractHessianInput.IsEnd())
                {
                    Object key = abstractHessianInput.ReadObject();

                    FieldDeserializer deser = (FieldDeserializer)_fieldMap[key];

                    if (deser != null)
                    {
                        deser.Deserialize(abstractHessianInput, obj);
                    }
                    else
                    {
                        abstractHessianInput.ReadObject();
                    }
                }

                abstractHessianInput.ReadMapEnd();

                Object resolve = Resolve(abstractHessianInput, obj);

                if (obj != resolve)
                {
                    abstractHessianInput.SetRef(iref, resolve);
                }

                return(resolve);
            }
            catch (IOException)
            {
                throw;
            }
            catch (Exception e)
            {
                throw new CHessianException(e.Message);
            }
        }
Esempio n. 11
0
        private Object ReadUntypedLengthList(AbstractHessianInput abstractHessianInput, int intListLength)
        {
            IList listResult = new ArrayList();

            abstractHessianInput.AddRef(listResult);
            while (intListLength > 0)
            {
                listResult.Add(abstractHessianInput.ReadObject());
                intListLength--;
            }
            return(listResult);
        }
Esempio n. 12
0
        private Object ReadUntypedList(AbstractHessianInput abstractHessianInput)
        {
            IList listResult = new ArrayList();

            abstractHessianInput.AddRef(listResult);
            while (!abstractHessianInput.IsEnd())
            {
                listResult.Add(abstractHessianInput.ReadObject());
            }
            abstractHessianInput.ReadEnd();
            return(listResult);
        }
Esempio n. 13
0
        /// <summary>
        /// Reads the array
        /// </summary>
        public override Object ReadLengthList(AbstractHessianInput abstractHessianInput, int length)
        {
            Object[] data = createArray(length);

            abstractHessianInput.AddRef(data);

            if (m_componentType != null)
            {
                for (int i = 0; i < data.Length; i++)
                {
                    data[i] = abstractHessianInput.ReadObject(m_componentType);
                }
            }
            else
            {
                for (int i = 0; i < data.Length; i++)
                {
                    data[i] = abstractHessianInput.ReadObject();
                }
            }

            return(data);
        }
Esempio n. 14
0
        /// <summary>
        /// Reads map
        /// </summary>
        /// <param name="abstractHessianInput">HessianInput to read from</param>
        /// <returns>Read object or null</returns>
        public override object ReadMap(AbstractHessianInput abstractHessianInput)
        {
            var ds    = new DataSet();
            int refer = abstractHessianInput.AddRef(ds);

            while (!abstractHessianInput.IsEnd())
            {
                var dt = new DataTable();
                if (abstractHessianInput.ReadMapStart() == CHessian2Constants.BC_MAP)
                {
                    abstractHessianInput.ReadType();
                }
                dt.TableName = abstractHessianInput.ReadString();
                while (!abstractHessianInput.IsEnd())
                {
                    var columnName   = abstractHessianInput.ReadString();
                    var typeFullName = abstractHessianInput.ReadString();
                    var type         = Type.GetType(typeFullName);
                    dt.Columns.Add(new DataColumn(columnName, type));
                }
                abstractHessianInput.ReadEnd();

                if (abstractHessianInput.ReadMapStart() == CHessian2Constants.BC_MAP)
                {
                    abstractHessianInput.ReadType();
                }
                while (!abstractHessianInput.IsEnd())
                {
                    ArrayList objects = new ArrayList();
                    if (abstractHessianInput.ReadMapStart() == CHessian2Constants.BC_MAP)
                    {
                        abstractHessianInput.ReadType();
                    }
                    while (!abstractHessianInput.IsEnd())
                    {
                        var obj = abstractHessianInput.ReadObject();
                        objects.Add(obj);
                    }
                    abstractHessianInput.ReadEnd();
                    var row = dt.NewRow();
                    row.ItemArray = objects.ToArray();
                    dt.Rows.Add(row);
                }
                abstractHessianInput.ReadEnd();
                ds.Tables.Add(dt);
            }
            abstractHessianInput.ReadEnd();
            return(ds);
        }
Esempio n. 15
0
        public override Object ReadObject(AbstractHessianInput abstractHessianInput, Object[] fields)
        {
            String[]    fieldNames = (String[])fields;
            IDictionary map        = (IDictionary)Activator.CreateInstance(m_type);

            int iref = abstractHessianInput.AddRef(map);

            for (int i = 0; i < fieldNames.Length; i++)
            {
                String name = fieldNames[i];
                map.Add(name, abstractHessianInput.ReadObject());
            }

            return(map);
        }
Esempio n. 16
0
        /// <summary>
        /// Reads the map
        /// </summary>
        /// <param name="abstractHessianInput">HessianInput-Instance to read from</param>
        /// <returns>Read map</returns>
        /// <exception cref="CHessianException"/>
        public virtual object ReadMap(AbstractHessianInput abstractHessianInput)
        {
            Object obj = abstractHessianInput.ReadObject();

            String className = this.GetType().Name;

            if (obj != null)
            {
                throw error(className + ": unexpected object " + obj.GetType().Name + " (" + obj + ")");
            }
            else
            {
                throw error(className + ": unexpected null value");
            }
        }
        public Object ReadMap(AbstractHessianInput abstractHessianInput, Object obj)
        {
            try
            {
                SerializationInfo serializationInfo = new SerializationInfo(m_type, new FormatterConverter());

                while (!abstractHessianInput.IsEnd())
                {
                    Object key = abstractHessianInput.ReadObject();
                    serializationInfo.AddValue((string)key, abstractHessianInput.ReadObject());
                }

                abstractHessianInput.ReadMapEnd();

                obj = Instantiate(serializationInfo);

                int iref = abstractHessianInput.AddRef(obj);

                Object resolve = Resolve(abstractHessianInput, obj);

                if (obj != resolve)
                {
                    abstractHessianInput.SetRef(iref, resolve);
                }

                return(resolve);
            }
            catch (IOException)
            {
                throw;
            }
            catch (Exception e)
            {
                throw new CHessianException(e.Message);
            }
        }
Esempio n. 18
0
        private Object ReadGenericList(AbstractHessianInput abstractHessianInput)
        {
            Type[] args     = m_type.GetGenericArguments();
            Type   itemType = args[0];
            Type   listType = typeof(System.Collections.Generic.List <>).MakeGenericType(itemType);

            object list = Activator.CreateInstance(listType);

            abstractHessianInput.AddRef(list);

            while (!abstractHessianInput.IsEnd())
            {
                object item = abstractHessianInput.ReadObject(itemType);
                listType.InvokeMember("Add", BindingFlags.InvokeMethod, null, list, new object[] { item });
            }
            abstractHessianInput.ReadEnd();
            return(list);
        }
        public Object ReadObject(AbstractHessianInput abstractHessianInput, Object obj, string[] fieldNames)
        {
            try
            {
                int iref = abstractHessianInput.AddRef(obj);

                foreach (var fieldName in fieldNames)
                {
                    FieldDeserializer reader = (FieldDeserializer)_fieldMap[fieldName];

                    if (reader != null)
                    {
                        reader.Deserialize(abstractHessianInput, obj);
                    }
                    else
                    {
                        abstractHessianInput.ReadObject();
                    }
                }

                Object resolve = Resolve(abstractHessianInput, obj);

                if (obj != resolve)
                {
                    abstractHessianInput.SetRef(iref, resolve);
                }

                return(resolve);
            }
            catch (IOException)
            {
                throw;
            }
            catch (Exception e)
            {
                throw new CHessianException(obj.GetType().FullName + ":" + e, e);
            }
        }
        public new Object ReadObject(AbstractHessianInput abstractHessianInput, Object[] fields)
        {
            String[] fieldNames = (String[])fields;

            String value = null;

            for (int i = 0; i < fieldNames.Length; i++)
            {
                if ("value".Equals(fieldNames[i]))
                {
                    value = abstractHessianInput.ReadString();
                }
                else
                {
                    abstractHessianInput.ReadObject();
                }
            }

            Object obj = create(value);

            abstractHessianInput.AddRef(obj);

            return(obj);
        }
Esempio n. 21
0
        //public new Type GetType()
        //{
        //    switch (m_intCode)
        //    {
        //        case BOOLEAN:
        //            return typeof(bool);
        //        case BYTE:
        //            return typeof(byte);
        //        case SHORT:
        //            return typeof(short);
        //        case INTEGER:
        //            return typeof(int);
        //        case LONG:
        //            return typeof(long);
        //        case FLOAT:
        //            return typeof(float);
        //        case DOUBLE:
        //            return typeof(double);
        //        case CHARACTER:
        //            return typeof(char);
        //        case STRING:
        //            return typeof(string);
        //        case DATE:
        //            return typeof(DateTime);
        //        case BOOLEAN_ARRAY:
        //            return typeof(bool[]);
        //        case BYTE_ARRAY:
        //            return typeof(byte[]);
        //        case SHORT_ARRAY:
        //            return typeof(short[]);
        //        case INTEGER_ARRAY:
        //            return typeof(int[]);
        //        case LONG_ARRAY:
        //            return typeof(long[]);
        //        case FLOAT_ARRAY:
        //            return typeof(float[]);
        //        case DOUBLE_ARRAY:
        //            return typeof(double[]);
        //        case CHARACTER_ARRAY:
        //            return typeof(char[]);
        //        case STRING_ARRAY:
        //            return typeof(string[]);
        //        case OBJECT_ARRAY:
        //            return typeof(object[]);
        //        default:
        //            throw new InvalidOperationException();
        //    }
        //}


        #region PUBLIC_METHODS
        /// <summary>
        /// Reads the basic (primitive & Date ) data types
        /// and arrays of them
        /// </summary>
        /// <param name="abstractHessianInput">Hessian Input instance</param>
        /// <exception cref="CHessianException"/>
        /// <returns>Read object</returns>
        public override object ReadObject(AbstractHessianInput abstractHessianInput)
        {
            switch (m_intCode)
            {
            case CSerializationConstants.NULL:
            {
                // hessian/3490
                abstractHessianInput.ReadObject();
                return(null);
            }

            case BOOLEAN:
                return(abstractHessianInput.ReadBoolean());

            case BYTE:
                return((byte)abstractHessianInput.ReadInt());

            case SBYTE:
                return((sbyte)abstractHessianInput.ReadInt());

            case FLOAT:
                return((float)abstractHessianInput.ReadDouble());

            case SHORT:
                return((short)abstractHessianInput.ReadInt());

            case INTEGER:
                return(abstractHessianInput.ReadInt());

            case LONG:
                return(abstractHessianInput.ReadLong());

            case DOUBLE:
                return(abstractHessianInput.ReadDouble());

            case STRING:
                return(abstractHessianInput.ReadString());

            case CHARACTER:
            {
                //int charResult = abstractHessianInput.ReadInt();
                //return (char)charResult;
                //Bei caucho ist hier ein Bug
                //TODO:Test
                string strResult = abstractHessianInput.ReadString();
                if (strResult == null || strResult.Length == 0)
                {
                    return(null);
                }
                else
                {
                    return(strResult[0]);
                }
            }

            case BOOLEAN_ARRAY:
            case SHORT_ARRAY:
            case INTEGER_ARRAY:
            case SBYTE_ARRAY:
            case LONG_ARRAY:
            case FLOAT_ARRAY:
            case DOUBLE_ARRAY:
            case STRING_ARRAY:
            {
                int code = abstractHessianInput.ReadListStart();

                switch (code)
                {
                case 'N':
                    return(null);

                case 0x10:
                case 0x11:
                case 0x12:
                case 0x13:
                case 0x14:
                case 0x15:
                case 0x16:
                case 0x17:
                case 0x18:
                case 0x19:
                case 0x1a:
                case 0x1b:
                case 0x1c:
                case 0x1d:
                case 0x1e:
                case 0x1f:
                    int length = code - 0x10;
                    abstractHessianInput.ReadInt();

                    return(ReadLengthList(abstractHessianInput, length));

                default:
                    String type = abstractHessianInput.ReadType();
                    length = abstractHessianInput.ReadLength();
                    return(ReadList(abstractHessianInput, length));
                }
            }

            case BYTE_ARRAY:
                return(abstractHessianInput.ReadBytes());

            case CHARACTER_ARRAY:
            {
                string strResult = abstractHessianInput.ReadString();

                if (strResult == null)
                {
                    return(null);
                }
                else
                {
                    int    intLength = strResult.Length;
                    char[] arrChars  = new char[intLength];
                    arrChars = strResult.ToCharArray();
                    return(arrChars);
                }
            }

            case DATE:
                long       javaTime  = abstractHessianInput.ReadUTCDate();
                const long timeShift = 62135596800000;
                DateTime   dt        = new DateTime((javaTime + timeShift) * 10000, DateTimeKind.Utc);
                dt = dt.ToLocalTime();     // der Einfachheit halber
                return(dt);

            default:
                throw new CHessianException("not supperted type for deserialization");
            }
        }
 public override void Deserialize(AbstractHessianInput abstractHessianInput, Object obj)
 {
     abstractHessianInput.ReadObject();
 }
        public override void Deserialize(AbstractHessianInput abstractHessianInput, Object obj)
        {
            var value = abstractHessianInput.ReadObject(ReflectionUtils.GetMemberUnderlyingType(_field));

            ReflectionUtils.SetMemberValue(_field, obj, value);
        }
        public override object ReadMap(AbstractHessianInput abstractHessianInput)
        {
            Hashtable fieldValueMap   = new Hashtable();
            string    _message        = null;
            Exception _innerException = null;

            while (!abstractHessianInput.IsEnd())
            {
                object objKey = abstractHessianInput.ReadObject();
                if (objKey != null)
                {
                    var deserFields = GetDeserializableFields();
                    var field       = (MemberInfo)deserFields[objKey];
                    // try to convert a Java Exception in a .NET exception
                    if (objKey.ToString() == "_message" || objKey.ToString() == "detailMessage")
                    {
                        if (field != null)
                        {
                            _message = abstractHessianInput.ReadObject(ReflectionUtils.GetMemberUnderlyingType(field)) as string;
                        }
                        else
                        {
                            _message = abstractHessianInput.ReadObject().ToString();
                        }
                    }
                    else if (objKey.ToString() == "_innerException" || objKey.ToString() == "cause")
                    {
                        try
                        {
                            if (field != null)
                            {
                                _innerException = abstractHessianInput.ReadObject(ReflectionUtils.GetMemberUnderlyingType(field)) as Exception;
                            }
                            else
                            {
                                _innerException = abstractHessianInput.ReadObject(typeof(Exception)) as Exception;
                            }
                        }
                        catch (Exception e)
                        {
                            // als Cause ist bei Java gerne mal eine zirkulรคre Referenz auf die Exception selbst
                            // angegeben. Das klappt nicht, weil die Referenz noch nicht registriert ist,
                            // weil der Typ noch nicht klar ist (s.u.)
                        }
                    }
                    else
                    {
                        if (field != null)
                        {
                            object objFieldValue = abstractHessianInput.ReadObject(ReflectionUtils.GetMemberUnderlyingType(field));
                            fieldValueMap.Add(field, objFieldValue);
                        }
                        else
                        {
                            // ignore (z. B. Exception Stacktrace "stackTrace" von Java)
                            abstractHessianInput.ReadObject();
                        }
                        //field.SetValue(result, objFieldValue);
                    }
                }
            }
            abstractHessianInput.ReadEnd();

            object result = null;

            try
            {
#if COMPACT_FRAMEWORK
                //CF TODO: tbd
#else
                try
                {
                    result = Activator.CreateInstance(this.m_type, new object[2] {
                        _message, _innerException
                    });
                }
                catch (Exception)
                {
                    try
                    {
                        result = Activator.CreateInstance(this.m_type, new object[1] {
                            _innerException
                        });
                    }
                    catch (Exception)
                    {
                        try
                        {
                            result = Activator.CreateInstance(this.m_type, new object[1] {
                                _message
                            });
                        }
                        catch (Exception)
                        {
                            result = Activator.CreateInstance(this.m_type);
                        }
                    }
                }
#endif
            }
            catch (Exception)
            {
                result = new Exception(_message, _innerException);
            }
            foreach (DictionaryEntry entry in fieldValueMap)
            {
                MemberInfo fieldInfo = (MemberInfo)entry.Key;
                object     value     = entry.Value;
                try { ReflectionUtils.SetMemberValue(fieldInfo, result, value); } catch (Exception) { }
            }

            // besser spรคt als gar nicht.
            int refer = abstractHessianInput.AddRef(result);


            return(result);
        }
Esempio n. 25
0
        /// <summary>
        /// Reads arrays
        /// </summary>
        /// <param name="abstractHessianInput">Hessian Input instance</param>
        /// <param name="intLength">Array length</param>
        /// <exception cref="CHessianException"/>
        /// <returns>Read object</returns>
        public override Object ReadList(AbstractHessianInput abstractHessianInput, int intLength)
        {
            switch (m_intCode)
            {
            case INTEGER_ARRAY:
            {
                if (intLength >= 0)
                {
                    int[] arrData = new int[intLength];

                    abstractHessianInput.AddRef(arrData);

                    for (int i = 0; i < arrData.Length; i++)
                    {
                        arrData[i] = abstractHessianInput.ReadInt();
                    }

                    abstractHessianInput.ReadEnd();

                    return(arrData);
                }
                else
                {
                    ArrayList arrayList = new ArrayList();

                    while (!abstractHessianInput.IsEnd())
                    {
                        arrayList.Add(abstractHessianInput.ReadInt());
                    }

                    abstractHessianInput.ReadEnd();

                    int[] arrData = new int[arrayList.Count];
                    for (int i = 0; i < arrData.Length; i++)
                    {
                        arrData[i] = (int)arrayList[i];
                    }


                    abstractHessianInput.AddRef(arrData);

                    return(arrData);
                }
            }

            case SBYTE_ARRAY:
            {
                if (intLength >= 0)
                {
                    sbyte[] arrData = new sbyte[intLength];

                    abstractHessianInput.AddRef(arrData);

                    for (int i = 0; i < arrData.Length; i++)
                    {
                        arrData[i] = (sbyte)abstractHessianInput.ReadInt();
                    }

                    abstractHessianInput.ReadEnd();

                    return(arrData);
                }
                else
                {
                    ArrayList arrayList = new ArrayList();

                    while (!abstractHessianInput.IsEnd())
                    {
                        arrayList.Add(abstractHessianInput.ReadInt());
                    }

                    abstractHessianInput.ReadEnd();

                    sbyte[] arrData = new sbyte[arrayList.Count];
                    for (int i = 0; i < arrData.Length; i++)
                    {
                        arrData[i] = (sbyte)arrayList[i];
                    }


                    abstractHessianInput.AddRef(arrData);

                    return(arrData);
                }
            }

            case STRING_ARRAY:
            {
                if (intLength >= 0)
                {
                    string[] arrData = new String[intLength];
                    abstractHessianInput.AddRef(arrData);

                    for (int i = 0; i < arrData.Length; i++)
                    {
                        arrData[i] = abstractHessianInput.ReadString();
                    }

                    abstractHessianInput.ReadEnd();

                    return(arrData);
                }
                else
                {
                    ArrayList arrayList = new ArrayList();

                    while (!abstractHessianInput.IsEnd())
                    {
                        arrayList.Add(abstractHessianInput.ReadString());
                    }

                    abstractHessianInput.ReadEnd();

                    string[] arrData = new String[arrayList.Count];
                    abstractHessianInput.AddRef(arrData);
                    for (int i = 0; i < arrData.Length; i++)
                    {
                        arrData[i] = (string)arrayList[i];
                    }


                    return(arrData);
                }
            }


            case BOOLEAN_ARRAY:
            {
                if (intLength >= 0)
                {
                    bool[] arrData = new bool[intLength];

                    abstractHessianInput.AddRef(arrData);

                    for (int i = 0; i < arrData.Length; i++)
                    {
                        arrData[i] = abstractHessianInput.ReadBoolean();
                    }

                    abstractHessianInput.ReadEnd();

                    return(arrData);
                }
                else
                {
                    ArrayList arrayList = new ArrayList();

                    while (!abstractHessianInput.IsEnd())
                    {
                        arrayList.Add(abstractHessianInput.ReadBoolean());
                    }

                    abstractHessianInput.ReadEnd();

                    bool[] arrData = new bool[arrayList.Count];

                    abstractHessianInput.AddRef(arrData);

                    for (int i = 0; i < arrData.Length; i++)
                    {
                        arrData[i] = (bool)arrayList[i];
                    }
                    return(arrData);
                }
            }

            case SHORT_ARRAY:
            {
                if (intLength >= 0)
                {
                    short[] arrData = new short[intLength];

                    abstractHessianInput.AddRef(arrData);

                    for (int i = 0; i < arrData.Length; i++)
                    {
                        arrData[i] = (short)abstractHessianInput.ReadInt();
                    }

                    abstractHessianInput.ReadEnd();

                    return(arrData);
                }
                else
                {
                    ArrayList arrayList = new ArrayList();

                    while (!abstractHessianInput.IsEnd())
                    {
                        arrayList.Add((short)abstractHessianInput.ReadInt());
                    }

                    abstractHessianInput.ReadEnd();

                    short[] arrData = new short[arrayList.Count];
                    for (int i = 0; i < arrData.Length; i++)
                    {
                        arrData[i] = (short)arrayList[i];
                    }

                    abstractHessianInput.AddRef(arrData);

                    return(arrData);
                }
            }



            case LONG_ARRAY:
            {
                if (intLength >= 0)
                {
                    long[] arrData = new long[intLength];

                    abstractHessianInput.AddRef(arrData);

                    for (int i = 0; i < arrData.Length; i++)
                    {
                        arrData[i] = abstractHessianInput.ReadLong();
                    }

                    abstractHessianInput.ReadEnd();

                    return(arrData);
                }
                else
                {
                    ArrayList arrayList = new ArrayList();

                    while (!abstractHessianInput.IsEnd())
                    {
                        arrayList.Add(abstractHessianInput.ReadLong());
                    }

                    abstractHessianInput.ReadEnd();

                    long[] arrData = new long[arrayList.Count];
                    for (int i = 0; i < arrData.Length; i++)
                    {
                        arrData[i] = (long)arrayList[i];
                    }

                    abstractHessianInput.AddRef(arrData);

                    return(arrData);
                }
            }

            case FLOAT_ARRAY:
            {
                if (intLength >= 0)
                {
                    float[] arrData = new float[intLength];
                    abstractHessianInput.AddRef(arrData);

                    for (int i = 0; i < arrData.Length; i++)
                    {
                        arrData[i] = (float)(abstractHessianInput.ReadDouble());
                    }

                    abstractHessianInput.ReadEnd();

                    return(arrData);
                }
                else
                {
                    ArrayList arrayList = new ArrayList();

                    while (!abstractHessianInput.IsEnd())
                    {
                        arrayList.Add(abstractHessianInput.ReadDouble());
                    }

                    abstractHessianInput.ReadEnd();

                    float[] arrData = new float[arrayList.Count];
                    for (int i = 0; i < arrData.Length; i++)
                    {
                        arrData[i] = (float)arrayList[i];
                    }

                    abstractHessianInput.AddRef(arrData);

                    return(arrData);
                }
            }

            case DOUBLE_ARRAY:
            {
                if (intLength >= 0)
                {
                    double[] arrData = new double[intLength];
                    abstractHessianInput.AddRef(arrData);

                    for (int i = 0; i < arrData.Length; i++)
                    {
                        arrData[i] = abstractHessianInput.ReadDouble();
                    }

                    abstractHessianInput.ReadEnd();

                    return(arrData);
                }
                else
                {
                    ArrayList arrayList = new ArrayList();

                    while (!abstractHessianInput.IsEnd())
                    {
                        arrayList.Add(abstractHessianInput.ReadDouble());
                    }

                    abstractHessianInput.ReadEnd();

                    double[] data = new double[arrayList.Count];
                    abstractHessianInput.AddRef(data);
                    for (int i = 0; i < data.Length; i++)
                    {
                        data[i] = (double)arrayList[i];
                    }


                    return(data);
                }
            }



            case OBJECT_ARRAY:
            {
                if (intLength >= 0)
                {
                    object[] arrData = new Object[intLength];
                    abstractHessianInput.AddRef(arrData);

                    for (int i = 0; i < arrData.Length; i++)
                    {
                        arrData[i] = abstractHessianInput.ReadObject();
                    }

                    abstractHessianInput.ReadEnd();

                    return(arrData);
                }
                else
                {
                    ArrayList arrayList = new ArrayList();

                    abstractHessianInput.AddRef(arrayList);         // XXX: potential issues here

                    while (!abstractHessianInput.IsEnd())
                    {
                        arrayList.Add(abstractHessianInput.ReadObject());
                    }

                    abstractHessianInput.ReadEnd();

                    object[] arrData = new Object[arrayList.Count];
                    for (int i = 0; i < arrData.Length; i++)
                    {
                        arrData[i] = arrayList[i];
                    }

                    return(arrData);
                }
            }

            default:
                throw new CHessianException("not supperted type for deserialization");
            }
        }