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

  • 相关阅读:
    关于Maven项目的pom.xml中的依赖或插件失效的解决方法
    java引用数据类型在方法中的值传递
    java匹配http或https的url的正则表达式20180912
    java正则表达式的进阶使用20180912
    java线程池 多线程 搜索包含关键字的文件路径
    魔术球问题
    [SDOI2009]晨跑
    [洛谷P2045]方格取数加强版
    最小路径覆盖问题
    最长不下降子序列问题
  • 原文地址:https://www.cnblogs.com/cabbage/p/2282562.html
Copyright © 2011-2022 走看看