/// <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); }
/// <summary> /// 读取下一个数据 /// </summary> /// <param name="scanner"></param> internal void Next(ref ReflectionScanner scanner) { while (enumerator.MoveNext()) { object elementValue = enumerator.Current; if (elementValue != null) { Type fieldType = elementValue.GetType(); if (fieldType != objectType.Type) { objectType = scanner.Scanner.GetObjectType(fieldType); } if (objectType.IsScan != 0) { if (fieldType.IsClass) { if (scanner.AddObject(elementValue)) { if (objectType.Append(ref scanner, elementValue, true) != 2) { return; } } else if (scanner.IsLimitExceeded) { return; } } else if (objectType.Append(ref scanner, elementValue, true) != 2) { return; } } } } --scanner.Arrays.Length; }