示例#1
0
 public ConstructorValueData(System.Reflection.ConstructorInfo ctor)
 {
     serializedType = new MemberData(ctor.DeclaringType);
     System.Reflection.ParameterInfo[] param = ctor.GetParameters();
     parameters = new ParameterValueData[param.Length];
     for (int i = 0; i < param.Length; i++)
     {
         parameters[i] = new ParameterValueData()
         {
             name     = param[i].Name,
             typeData = MemberData.CreateFromType(param[i].ParameterType)
         };
     }
 }
示例#2
0
        public ConstructorValueData(object value)
        {
            if (value == null)
            {
                throw new System.ArgumentNullException(nameof(value));
            }
            var type  = value.GetType();
            var ctors = type.GetConstructors();

            if (ctors.Length > 0)
            {
                var ctor = ctors[0];
                for (int i = 0; i < ctors.Length; i++)
                {
                    if (ctors[i].GetParameters().Length == 0)
                    {
                        ctor = ctors[i];
                        break;
                    }
                }
                System.Reflection.ParameterInfo[] param = ctor.GetParameters();
                parameters = new ParameterValueData[param.Length];
                for (int i = 0; i < param.Length; i++)
                {
                    parameters[i] = new ParameterValueData()
                    {
                        name     = param[i].Name,
                        typeData = MemberData.CreateFromType(param[i].ParameterType)
                    };
                }
                var initializers = new List <ParameterValueData>();
                var members      = type.GetMembers(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
                for (int i = 0; i < members.Length; i++)
                {
                    var member = members[i];
                    if (member is System.Reflection.FieldInfo field)
                    {
                        var val = field.GetValue(value);
                        initializers.Add(new ParameterValueData()
                        {
                            name     = field.Name,
                            typeData = MemberData.CreateFromType(field.FieldType),
                            value    = val
                        });
                    }
                    else if (member is System.Reflection.PropertyInfo property)
                    {
                        if (property.CanRead && property.CanWrite)
                        {
                            var val = property.GetValue(value);
                            initializers.Add(new ParameterValueData()
                            {
                                name     = property.Name,
                                typeData = MemberData.CreateFromType(property.PropertyType),
                                value    = val
                            });
                        }
                    }
                }
            }
            serializedType = new MemberData(value.GetType());
        }