コード例 #1
0
        /// <summary>
        /// 读取下一个数据
        /// </summary>
        /// <param name="scanner"></param>
        internal void Next(ref ReflectionScanner scanner)
        {
            object value      = this.value;
            bool   isArray    = this.isArray;
            int    isEndIndex = 0;

            do
            {
                KeyValue <FieldInfo, ReflectionType> field = this.objectType.ScanFields[index++];
                if (index == this.objectType.ScanFields.Length)
                {
                    --scanner.Objects.Length;
                    if (this.objectType.BaseType.IsScan != 0)
                    {
                        this.objectType.BaseType.Append(ref scanner, value, isArray);
                    }
                    isEndIndex = 1;
                }
                object fieldValue = field.Key.GetValue(value);
                if (fieldValue != null)
                {
                    ReflectionType objectType = field.Value;
                    Type           fieldType  = fieldValue.GetType();
                    if (fieldType != objectType.Type)
                    {
                        objectType = scanner.Scanner.GetObjectType(fieldType);
                    }
                    if (objectType.IsScan != 0)
                    {
                        if (fieldType.IsClass)
                        {
                            if (scanner.AddObject(fieldValue))
                            {
                                if (!isArray)
                                {
                                    objectType.Add(scanner.FieldInfo, scanner.Scanner);
                                }
                                if (objectType.Append(ref scanner, fieldValue, false) == 0)
                                {
                                    return;
                                }
                            }
                            else if (scanner.IsLimitExceeded)
                            {
                                return;
                            }
                        }
                        else if (objectType.Append(ref scanner, fieldValue, false) == 0)
                        {
                            return;
                        }
                    }
                }
            }while (isEndIndex == 0);
        }
コード例 #2
0
 /// <summary>
 /// 添加扫描对象
 /// </summary>
 /// <param name="scanner"></param>
 /// <param name="value"></param>
 /// <param name="isArray">对象是否数组元素,数组元素不统计根静态字段</param>
 /// <returns>添加对象类型</returns>
 internal override byte Append(ref ReflectionScanner scanner, object value, bool isArray)
 {
     if (ScanFields.Length != 0)
     {
         scanner.Append(new ReflectionObjectScanner(value, this, isArray));
         return(0);
     }
     return(BaseType.IsScan == 0 ? (byte)2 : BaseType.Append(ref scanner, value, isArray));
 }