コード例 #1
0
        /// <summary>
        /// 输出对象_检查对象.
        /// </summary>
        /// <param name="iw">带缩进输出者.</param>
        /// <param name="obj">object.</param>
        /// <param name="context">Context.</param>
        /// <param name="tp">返回 类型.</param>
        /// <param name="showBaseName">返回 是否显示基类类型的名称.</param>
        /// <returns>检查是否支持此对象的输出, 支持的话返回true, 否则返回false.</returns>
        public virtual bool WriterObject_CheckObject(IIndentedWriter iw, object obj, IndentedWriterContext context, out Type tp, out bool showBaseName)
        {
            // check.
            tp           = null;
            showBaseName = false;               // 是否显示基类类型的名称.
            if (null == obj)
            {
                return(false);
            }
            tp = obj.GetType();
            if (null == m_BaseType)
            {
                return(false);
            }
#if NETFX_CORE
            TypeInfo ti = tp.GetTypeInfo();
            if (ti.IsEnum)
            {
                return(false);
            }
            if (ti.IsPointer)
            {
                return(false);
            }
            if (ti.IsPrimitive)
            {
                return(false);
            }
#else
            if (tp.IsEnum)
            {
                return(false);
            }
            if (tp.IsPointer)
            {
                return(false);
            }
            if (tp.IsPrimitive)
            {
                return(false);
            }
#endif
            if ((m_Options & IndentedObjectFunctorOptions.OnlyType) != 0)
            {
                if (!m_BaseType.Equals(tp))
                {
                    return(false);
                }
            }
            else
            {
#if NETFX_CORE
                if (!m_BaseType.GetTypeInfo().IsAssignableFrom(ti))
                {
                    return(false);
                }
#else
                if (!m_BaseType.IsInstanceOfType(obj))
                {
                    return(false);
                }
#endif
                if ((m_Options & IndentedObjectFunctorOptions.OnlyMember) != 0)
                {
                    tp = m_BaseType;
                }
                else
                {
                    showBaseName = !m_BaseType.Equals(tp) && !m_BaseType.Equals(typeof(object));
                }
            }
            if ((m_Options & IndentedObjectFunctorOptions.AllowSimple) == 0)
            {
                if (IndentedWriterUtil.IsSimpleType(tp))
                {
                    return(false);
                }
            }
            return(true);
        }