Request에서 사용할 수 있는 모델을 자동으로 생성하는 보조 클래스입니다.Form 또는 Request.QueryString에서 Model 자동 생성

2585 단어 request
public class Person<T>

    {

        public string name;

        public bool sex;

        public int age;

        public DateTime birthday;

        public DateTime? now;

        public T desc;

    }



//main     



            var NVC = new NameValueCollection();

            NVC.Add("name", "  ");

            NVC.Add("sex", "1");

            NVC.Add("age", "23");

            NVC.Add("birthday", "1989-06-27");

            NVC.Add("now", "2011-12-08");

            NVC.Add("Desc", ".net   ");

            var person = NVC.ModelGeneration<Person<string>>();
 
  

 以下为扩展方法

public static class ModelGenerationExtension

    {

        /// <summary>

        ///              

        /// </summary>

        public static T ModelGeneration<T>(this NameValueCollection nvc)

        {

            var type = typeof(T);

            var obj = (T)Activator.CreateInstance(type);

            var bindflag = System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.IgnoreCase | System.Reflection.BindingFlags.GetField;

            var fileds = type.GetFields(bindflag);

            foreach (var filed in fileds)

            {

                var val = nvc[filed.Name];

                var fType = filed.FieldType;

                if (fType.IsGenericType && fType.GetGenericTypeDefinition() == typeof(Nullable<>))

                {

                    //         

                    fType = fType.GetGenericArguments()[0];

                }

                try

                {

                    if (typeof(bool) == fType && val.ToLower() != "true" && val.ToLower() != "false")

                        if (val == "1")

                            val = "true";

                        else

                            val = "false";

                    type.GetField(filed.Name, bindflag).SetValue(obj, Convert.ChangeType(val, fType));

                }

                catch

                {

                    type.GetField(filed.Name, bindflag).SetValue(obj, Activator.CreateInstance(fType));

                }



            }

            return obj;

        }

    }


 
물론 이렇게 적용할 수 있다.
var model= Request.Form.ModelGeneration<당신의 유형>();

좋은 웹페이지 즐겨찾기