/// <summary> /// Reads the object as a map. (Dictionary<Object, Object>) /// </summary> /// <param name="abstractHessianInput">HessianInput instance to read from</param> /// <param name="strType">Type of the map (can be null)</param> /// <returns>Object read from stream</returns> public Object ReadMap(AbstractHessianInput abstractHessianInput, string strType) { AbstractDeserializer abstractDeserializer = GetDeserializer(strType); if (abstractDeserializer == null) { abstractDeserializer = new CMapDeserializer(typeof(Dictionary <Object, Object>)); } return(abstractDeserializer.ReadMap(abstractHessianInput)); }
/// <summary> /// Returns according deserializer to the given type /// </summary> /// <param name="type">Type of the deserializer</param> /// <returns>Deserializer instance</returns> public AbstractDeserializer GetDeserializer(Type type) { object val; AbstractDeserializer abstractDeserializer = null; if (!m_htDeserializerMap.TryGetValue(type, out val)) { if (typeof(IDictionary).IsAssignableFrom(type)) { abstractDeserializer = new CMapDeserializer(type); } else if (type.IsGenericType && typeof(System.Nullable <>).IsAssignableFrom(type.GetGenericTypeDefinition())) { // nullbarer Typ Type[] args = type.GetGenericArguments(); return(GetDeserializer(args[0])); } else if (type.IsEnum) { return(new CEnumDeserializer(type)); } else if (type.IsArray) { abstractDeserializer = new CArrayDeserializer(GetDeserializer(type.GetElementType())); } else if (typeof(IList).IsAssignableFrom(type) || (type.IsGenericType && typeof(System.Collections.Generic.List <>).IsAssignableFrom(type.GetGenericTypeDefinition()))) { abstractDeserializer = new CCollectionDeserializer(type); } else if (typeof(Exception).IsAssignableFrom(type)) { abstractDeserializer = new CExceptionDeserializer(type); } else { if (m_htCachedDeserializerMap.TryGetValue(type.FullName, out val)) { abstractDeserializer = (AbstractDeserializer)val; } else { abstractDeserializer = new CObjectDeserializer(type); m_htCachedDeserializerMap.Add(type.FullName, abstractDeserializer); } } } else { abstractDeserializer = (AbstractDeserializer)val; } return(abstractDeserializer); }