/// <summary> /// /// </summary> /// <param name="obj"></param> /// <param name="property"></param> /// <param name="info"></param> public virtual void BuildInnerProperty(object obj, PropertyInfo property, ObjectMessageProperty info) { info.ReplaceLast(obj, property.Name); var propValue = property.GetValue(obj); ReplaceHelper.Replace(info, propValue); BuildInnerProperties(propValue, info); }
/// <summary> /// /// </summary> /// <param name="arg"></param> /// <param name="info"></param> private void BuildMessageProperty(object arg, PropertyInfo info) { var propInfo = new ObjectMessageProperty(); propInfo.Add(info.Name, arg); var propValue = info.GetValue(arg); PropertyManager.Build(propValue, propInfo); }
/// <summary> /// /// </summary> /// <param name="arg"></param> /// <param name="info"></param> /// <param name="index"></param> private void BuildMessagePropertyWithIndex(object arg, PropertyInfo info, int index) { var propInfo = new ObjectMessageProperty(); propInfo.AddToStartArgsIndex(index, propInfo); propInfo.Add(info.Name, arg); var propValue = info.GetValue(arg); PropertyManager.Build(propValue, propInfo); }
/// <summary> /// /// </summary> /// <param name="enumerator"></param> /// <param name="messageProperty"></param> /// <param name="index"></param> private void BuildArrayItem(IEnumerator enumerator, ObjectMessageProperty messageProperty, int index) { var sb = new StringBuilder(); sb.Append(Strings.LSquareBracket); sb.Append(index); sb.Append(Strings.RSquareBracket); messageProperty.ReplaceProperty(enumerator, sb.ToString()); PropertyManager.BuildInnerProperties(enumerator.Current, messageProperty); }
/// <summary> /// /// </summary> /// <param name="arg"></param> /// <param name="index"></param> private void BuildArgWithoutProperty(object arg, int index) { InitalizeCirculationObjects(arg); var propInfo = new ObjectMessageProperty(); PropertyManager.Build(arg, propInfo); InitalizeCirculationObjects(arg); propInfo = new ObjectMessageProperty(); propInfo.AddToStartArgsIndex(index, propInfo); PropertyManager.Build(arg, propInfo); }
/// <summary> /// /// </summary> /// <param name="obj"></param> /// <param name="messageProperty"></param> public override void Build(object obj, ObjectMessageProperty messageProperty) { if (obj is Array array) { BuildArray(array.GetEnumerator(), messageProperty); } if (obj is IEnumerable enumerable) { BuildArray(enumerable.GetEnumerator(), messageProperty); } }
/// <summary> /// /// </summary> /// <param name="enumerator"></param> /// <param name="messageProperty"></param> private void BuildArray(IEnumerator enumerator, ObjectMessageProperty messageProperty) { if (enumerator == null) { return; } var index = 0; while (enumerator.MoveNext()) { BuildArrayItem(enumerator, messageProperty, index++); } }
/// <summary> /// /// </summary> /// <param name="obj"></param> /// <param name="messageProperty"></param> public virtual void BuildInnerProperties(object obj, ObjectMessageProperty messageProperty) { if (Builder.CirculationObjects.Any(a => ReferenceEquals(a, obj))) { return; } var props = PropertyManager.GetProperties(obj); props.ForEach(f => BuildInnerProperty(obj, f, messageProperty)); if (props.Any()) { Builder.CirculationObjects.Add(obj); } if (!props.Any()) { BuildWithOutProperty(obj, messageProperty); } }
/// <summary> /// /// </summary> /// <param name="obj"></param> /// <param name="messageProperty"></param> public virtual void Build(object obj, ObjectMessageProperty messageProperty) { ReplaceHelper.Replace(messageProperty, obj); }
/// <summary> /// /// </summary> /// <param name="obj"></param> /// <param name="messageProperty"></param> public override void Build(object obj, ObjectMessageProperty messageProperty) { ReplaceHelper.Replace(messageProperty, obj); PropertyManager.BuildInnerProperties(obj, messageProperty); }
/// <summary> /// /// </summary> /// <param name="messageProperty"></param> /// <param name="value"></param> public void Replace(ObjectMessageProperty messageProperty, object value) { Replace(messageProperty.ToString(), value); }
/// <summary> /// /// </summary> /// <param name="obj"></param> /// <param name="messageProperty"></param> public void BuildInnerProperties(object obj, ObjectMessageProperty messageProperty) { var builder = _builders.FirstOrDefault(f => f.IsCanWork(obj)); builder?.BuildInnerProperties(obj, messageProperty); }