zoukankan      html  css  js  c++  java
  • 一个自动生成模型的辅助类,可以从Request.Form或者Request.QueryString中自动生成Model

    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<你的类型>();

  • 相关阅读:
    POJ3613 Cow Relays 经过n条边的最短路
    UML笔记(六)
    UML主要内容及参考资料
    UML笔记(五)
    UML笔记(一)
    UML笔记(三)
    UML笔记(四)
    软件工程——第十一章 软件项目管理
    软件工程——第十章 软件工程管理
    UML笔记(二)
  • 原文地址:https://www.cnblogs.com/cabbage/p/2282562.html
Copyright © 2011-2022 走看看