/// <summary> /// Reads the array. /// </summary> /// <param name="abstractHessianInput">HessianInput</param> /// <param name="intLength">Length of data</param> /// <param name="strType">Type of the array objects</param> /// <returns>Array data</returns> public Object ReadList(AbstractHessianInput abstractHessianInput, int intLength, string strType) { AbstractDeserializer abstractDeserializer = GetDeserializer(strType); if (abstractDeserializer != null) { return(abstractDeserializer.ReadList(abstractHessianInput, intLength)); } else { return(new CCollectionDeserializer(typeof(List <Object>)).ReadList( abstractHessianInput, intLength)); } }
/// <summary> /// Reads an arbitrary object from the input stream. /// </summary> /// <param name="expectedType">the expected class if the protocol doesn't supply it.</param> /// <returns>Read object</returns> /// <exception cref="CHessianException"/> /// <exception cref="CHessianException"/> public override object ReadObject(Type expectedType) { object objResult = null; if (expectedType == null || expectedType.Equals(typeof(object))) { objResult = ReadObject(); } else { int intTag = Read(); if (intTag != PROT_NULL) { switch (intTag) { case PROT_MAP_TYPE: { string strType = ReadType(); AbstractDeserializer deserializer = GetObjectDeserializer(strType); if (expectedType != deserializer.GetOwnType() && expectedType.IsAssignableFrom(deserializer.GetOwnType())) { return(deserializer.ReadMap(this)); } deserializer = GetDeserializer(expectedType); return(deserializer.ReadMap(this)); } case PROT_REF_TYPE: { int intRefNumber = ParseInt(); return(m_arrRefs[intRefNumber]); } case 'r': { throw new CHessianException("remote type is not implemented"); } case PROT_LIST_TYPE: { string strType = this.ReadType(); int intLength = this.ReadLength(); AbstractDeserializer deserializer = this.m_serializerFactory.GetObjectDeserializer(strType); if (expectedType != deserializer.GetType() && expectedType.IsAssignableFrom(deserializer.GetType())) { //if (expectedType != deserializer.GetOwnType() && expectedType.IsAssignableFrom(deserializer.GetOwnType())) return(deserializer.ReadList(this, intLength)); } deserializer = m_serializerFactory.GetDeserializer(expectedType); return(deserializer.ReadList(this, intLength)); } } m_intPeek = intTag; objResult = m_serializerFactory.GetDeserializer(expectedType).ReadObject(this); } } return(objResult); }