예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
        /// <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);
        }
예제 #6
0
        /// <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);
            }
        }
예제 #7
0
        /// <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++);
            }
        }
예제 #8
0
        /// <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);
            }
        }
예제 #9
0
 /// <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);
 }
예제 #11
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="messageProperty"></param>
 /// <param name="value"></param>
 public void Replace(ObjectMessageProperty messageProperty, object value)
 {
     Replace(messageProperty.ToString(), value);
 }
예제 #12
0
        /// <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);
        }