Esempio n. 1
0
        /// <summary>写入枚举数据,复杂类型使用委托方法进行处理</summary>
        /// <param name="value">对象</param>
        /// <param name="type">类型</param>
        /// <param name="callback">使用指定委托方法处理复杂数据</param>
        /// <returns>是否写入成功</returns>
        public virtual Boolean WriteEnumerable(IEnumerable value, Type type, WriteObjectCallback callback)
        {
            if (value == null)
            {
                return(true);
            }

            type = CheckAndWriteType("WriteEnumerableType", value, type);

            //type = value.GetType();
            if (type != null && !typeof(IEnumerable).IsAssignableFrom(type))
            {
                throw new InvalidOperationException("目标类型不是枚举类型!");
            }

            // 计算元素类型,如果无法计算,这里不能处理,否则能写不能读(因为不知道元素类型)
            var elementType = TypeX.GetElementType(type);

            //if (elementType == null) return false;

            Int32 i = 0;

            foreach (var item in value)
            {
                Depth++;
                if (!WriteItem(item, elementType, i++, callback))
                {
                    return(false);
                }
                Depth--;
            }
            return(true);
        }