/// <summary> /// Constructor. /// </summary> /// <param name="componentABSTRACTDeserializer">Deserializer for the instances in the array</param> public CArrayDeserializer(AbstractDeserializer componentABSTRACTDeserializer) { if (componentABSTRACTDeserializer != null) { m_componentType = componentABSTRACTDeserializer.GetOwnType(); } }
/// <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 != CHessianProtocolConstants.PROT_NULL) { switch (intTag) { case CHessianProtocolConstants.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 CHessianProtocolConstants.PROT_REF_TYPE: { int intRefNumber = ParseInt(); return(m_arrRefs[intRefNumber]); } case 'r': { throw new CHessianException("remote type is not implemented"); } case CHessianProtocolConstants.PROT_LIST_TYPE: { string strType = this.ReadType(); int intLength = this.ReadLength(); IDeserializer deserializer = this.m_serializerFactory.GetObjectDeserializer(strType); if ((expectedType == deserializer.GetOwnType() || expectedType.IsAssignableFrom(deserializer.GetOwnType()))) { //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); }