public InspectValueObject(string name, object value, InspectValueState state = InspectValueState.None) { this.name = name; this.value = value; this.state = state; Init(); }
public InspectValue Next() { if (state == InspectValueState.None) { if (value == null) { state = InspectValueState.Value; return(new InspectValue(name, InspectValueType.Value)); } //if (_depth++ > _maxDepth) // return false; if (_isValue) { state = InspectValueState.Value; return(new InspectValue(name, InspectValueType.Value, value, type)); } else if (value is IEnumerable) { onlyVisible = true; } if (name == "") { name = "value"; } else { name = name + "_value"; } state = InspectValueState.Properties; } if (state == InspectValueState.Properties) { while (propertyEnumerator.MoveNext()) { PropertyInfo property = propertyEnumerator.Current; if (onlyVisible && Attribute.GetCustomAttribute(property, typeof(pb.VisibleAttribute)) == null) { continue; } object o = null; try { o = property.GetGetMethod().Invoke(value, new object[0]); } catch (Exception ex) { o = Error.GetErrorMessage(ex); } string name2; if (name == "") { name2 = property.Name; } else { name2 = name + "_" + property.Name; } return(new InspectValue(name2, InspectValueType.NewValue, o)); } state = InspectValueState.Fields; } if (state == InspectValueState.Fields) { while (fieldEnumerator.MoveNext()) { FieldInfo field = fieldEnumerator.Current; if (onlyVisible && Attribute.GetCustomAttribute(field, typeof(pb.VisibleAttribute)) == null) { continue; } object o = null; try { o = field.GetValue(value); } catch (Exception ex) { o = Error.GetErrorMessage(ex); } string name2; if (name == "") { name2 = field.Name; } else { name2 = name + "_" + field.Name; } return(new InspectValue(name2, InspectValueType.NewValue, o)); } if (value is IEnumerable) { state = InspectValueState.EnumerableBegin; } } if (state == InspectValueState.EnumerableBegin) { state = InspectValueState.Enumerable; enumerator = ((IEnumerable)value).GetEnumerator(); enumeratorIndex = 1; return(new InspectValue(name, InspectValueType.EnumerableBegin)); } if (state == InspectValueState.Enumerable) { if (enumerator.MoveNext()) { return(new InspectValue(name + enumeratorIndex++.ToString(), InspectValueType.NewValue, enumerator.Current)); } state = InspectValueState.EnumerableEnd; return(new InspectValue(name, InspectValueType.EnumerableEnd)); } return(null); }