Exemple #1
0
        public static void MapToDictionary(Object instance, IDictionary <Member, Object> mappedMembers, Member parent = null)
        {
            var t = instance.GetType();

            foreach (var property in t.GetProperties(BindingFlags.Public | BindingFlags.Instance))
            {
                if (IsSerializableType(property.PropertyType))
                {
                    var member = new PropertyMember(property)
                    {
                        Parent = parent
                    };
                    var value = member.GetValue(instance);

                    mappedMembers.Add(member, value);

                    if (IsTraversableType(member.MemberType) && !member.IsBinarySerialized)
                    {
                        MapToDictionary(value, mappedMembers, member);
                    }
                }
            }

            foreach (var field in t.GetFields(BindingFlags.Public | BindingFlags.Instance))
            {
                if (IsSerializableType(field.FieldType))
                {
                    var member = new FieldMember(field)
                    {
                        Parent = parent
                    };
                    var value = member.GetValue(instance);

                    mappedMembers.Add(member, value);

                    if (IsTraversableType(member.MemberType) && !member.IsBinarySerialized)
                    {
                        MapToDictionary(value, mappedMembers, member);
                    }
                }
            }
        }