Deserializing of Maps
Inheritance: hessiancsharp.io.AbstractDeserializer
コード例 #1
0
        /// <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));
        }
コード例 #2
0
        /// <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);
        }