Exemple #1
0
        public static ReflectedObject Reflect(string name, object o, ReflectedObject parent, int collectionIndex = 0)
        {
            var result = ReflectCommonType(name, o, parent, collectionIndex);

            if (result != null)
            {
                return(result);
            }

            result = new ReflectedObject(parent, collectionIndex);
            var t = o.GetType();

            result.Name   = name;
            result.Value  = o.ToString();
            result.Object = o;
            var publicProperties =
                t.GetProperties(BindingFlags.Public | BindingFlags.Instance)
                .Where(x => !x.GetIndexParameters().Any());
            var publicFields      = t.GetFields(BindingFlags.Public | BindingFlags.Instance);
            var privateProperties =
                t.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance)
                .Where(x => !x.GetIndexParameters().Any());
            var privateFields = t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance)
                                .Where(x => !x.Name.Contains("__BackingField"));

            ReflectedObject FormatProperty(PropertyInfo x) => Reflect(x.Name, GetPropertySafe(x, o), result);
            ReflectedObject FormatField(FieldInfo x) => Reflect(x.Name, GetFieldSafe(x, o), result);

            result.SubObjects =
                publicProperties.Select(FormatProperty)
                .Concat(publicFields.Select(FormatField)).OrderBy(x => x.Name)
                .Concat(
                    privateProperties.Select(FormatProperty)
                    .Concat(privateFields.Select(FormatField)).OrderBy(x => x.Name));

            return(result);
        }
Exemple #2
0
        public static ReflectedObject ReflectCommonType(string name, object o, ReflectedObject parent, int index)
        {
            switch (o)
            {
            case null:
                return(new ReflectedObject(parent, index)
                {
                    Name = name, Object = null, Value = "null"
                });

            case string s:
                return(new ReflectedObject(parent, index)
                {
                    Name = name, Object = o, Value = $"\"{s.Replace("\"", "\\\"")}\""
                });

            case bool _:
            case byte _:
            case ushort _:
            case short _:
            case uint _:
            case int _:
            case ulong _:
            case long _:
            case float _:
            case double _:
                return(new ReflectedObject(parent, index)
                {
                    Name = name, Object = o, Value = o.ToString()
                });

            case Enum e:
                return(new ReflectedObject(parent, index)
                {
                    Name = name, Object = o, Value = e.ToString()
                });

            case Vector2 v:
                return(new ReflectedObject(parent, index)
                {
                    Name = name, Object = o, Value = $"({v.X}, {v.Y})".ToString()
                });

            case Vector3 v:
                return(new ReflectedObject(parent, index)
                {
                    Name = name, Object = o, Value = $"({v.X}, {v.Y}, {v.Z})".ToString()
                });

            case ICollection e:
                var coll = new ReflectedObject(parent, index)
                {
                    Name = name, Object = o, Value = e.Count.ToString()
                };
                coll.SubObjects = e.OfType <object>().Select((x, i) => Reflect(i.ToString(), x, coll, i));
                return(coll);

            case IEnumerable e:
                var enumerable = new ReflectedObject(parent, index)
                {
                    Name = name, Object = o, Value = "",
                };
                enumerable.SubObjects = e.OfType <object>().Select((x, i) => Reflect(i.ToString(), x, enumerable, i));
                return(enumerable);
            }

            return(null);
        }
Exemple #3
0
 public ReflectedObject(ReflectedObject parent, int index)
 {
     Parent = parent; CollectionIndex = index;
 }
Exemple #4
0
        public static ReflectedObject ReflectCommonType(string name, object o, ReflectedObject parent, int index)
        {
            switch (o)
            {
            case null:
                return(new ReflectedObject(parent, index)
                {
                    Name = name, Target = null, Value = "null"
                });

            case string s:
                return(new ReflectedObject(parent, index)
                {
                    Name = name, Target = o, Value = $"\"{s.Replace("\"", "\\\"", StringComparison.Ordinal)}\""
                });

            case bool:
            case byte:
            case ushort:
            case short:
            case uint:
            case int:
            case ulong:
            case long:
            case float:
            case double:
                return(new ReflectedObject(parent, index)
                {
                    Name = name, Target = o, Value = o.ToString()
                });

            case Enum e:
                return(new ReflectedObject(parent, index)
                {
                    Name = name, Target = o, Value = e.ToString()
                });

            case Vector2 v:
                return(new ReflectedObject(parent, index)
                {
                    Name = name, Target = o, Value = $"({v.X}, {v.Y})"
                });

            case Vector3 v:
                return(new ReflectedObject(parent, index)
                {
                    Name = name, Target = o, Value = $"({v.X}, {v.Y}, {v.Z})"
                });

            case ICollection e:
                var coll = new ReflectedObject(parent, index)
                {
                    Name = name, Target = o, Value = e.Count.ToString(CultureInfo.InvariantCulture)
                };
                coll.SubObjects = e.Cast <object>().Select((x, i) => Reflect(i.ToString(CultureInfo.InvariantCulture), x, coll, i));
                return(coll);

            case IEnumerable e:
                var enumerable = new ReflectedObject(parent, index)
                {
                    Name = name, Target = o, Value = "",
                };
                enumerable.SubObjects = e.Cast <object>().Select((x, i) => Reflect(i.ToString(CultureInfo.InvariantCulture), x, enumerable, i));
                return(enumerable);
            }

            return(null);
        }