Esempio n. 1
0
        private static object execute(object obj, MethodInfo mi, NameValueCollection nv)
        {
            object ret;

            ParameterInfo[] paras = mi.GetParameters();

            if (paras.Length == 1 && paras[0].ParameterType == typeof(NameValueCollection))
            {
                ret = mi.Invoke(obj, new object[] { nv });
            }
            else if (paras.Length == 0)
            {
                ret = mi.Invoke(obj, null);
            }
            else
            {
                List <object> p = new List <object>();

                foreach (var item in paras)
                {
                    if (item.ParameterType.IsSubclassOf(typeof(Array)))
                    {
                        string v = nv[item.Name] ?? nv[item.Name + "[]"];

                        string[] strs  = StringUtil.CommaDelimitedListToStringArray(v);
                        Array    array = Array.CreateInstance(item.ParameterType.GetElementType(), strs.Length);
                        for (int i = 0; i < strs.Length; i++)
                        {
                            array.SetValue(TypeConvertUtil.ConvertTo(strs[i], item.ParameterType.GetElementType()), i);
                        }

                        p.Add(array);
                    }
                    else if (item.ParameterType == typeof(MobileDetect))
                    {
                        p.Add(MobileDetect.Instance);
                    }
                    else
                    {
                        string v = nv[item.Name];

                        p.Add(TypeConvertUtil.ConvertTo(v, item.ParameterType));
                    }
                }

                ret = mi.Invoke(obj, p.ToArray());
            }
            return(ret);
        }
Esempio n. 2
0
        public static List <T> ImportFromXml(XmlDocument xml)
        {
            Type t = typeof(T);

            List <PropertyInfo> props = new List <PropertyInfo>(t.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly));

            List <T> list = new List <T>();

            XmlNode node = xml.DocumentElement.SelectSingleNode("//" + t.FullName);

            if (node == null)
            {
                return(list);
            }

            foreach (XmlNode n in node.ChildNodes)
            {
                T obj = Activator.CreateInstance <T>();

                foreach (XmlAttribute attr in n.Attributes)
                {
                    PropertyInfo pi = props.Find(p =>
                    {
                        return(p.Name.Equals(attr.Name, StringComparison.InvariantCultureIgnoreCase));
                    });

                    if (pi == null || !pi.CanWrite)
                    {
                        continue;
                    }

                    pi.SetValue(obj, TypeConvertUtil.ConvertTo(attr.Value, pi.PropertyType), null);
                }

                list.Add(obj);
            }

            ILinqContext <T> context = CreateContext();

            // remove old items
            //
            List <t> ids = new List <t>();

            foreach (var item in list)
            {
                ids.Add(item.Id);
            }

            List <T> old_list = Gets(context, StringUtil.CollectionToCommaDelimitedString(ids));

            foreach (var item in old_list)
            {
                if (list.Find((T obj) => { return(item.Id.Equals(obj.Id)); }) != null)
                {
                    context.Remove(item);
                }
            }

            // add new items
            //
            foreach (var item in list)
            {
                context.Add(item, true);
            }

            context.SubmitChanges(true);

            return(list);
        }