zoukankan      html  css  js  c++  java
  • 有选择的复制对象,即根据客户端传值来复制对象属性值

     
    有选择的复制对象,即根据客户端传值来复制对象属性值
    第一个方法是接收调用方发来的参数列表,此方法很有用。
    第二个方法是根据调用方发来的参数来更新target对象,而不是只要source对象都更新为target对象的值。
    其中,第二个对象复制方法中,有对象属性有别名的情况,不需要的话可以直接删掉相关代码。
     
    private Dictionary<stringobject> GetPostData()
            {

                Dictionary<stringobject> dic = new Dictionary<stringobject>();

                var context = Request.Properties["MS_HttpContext"as System.Web.HttpContextBase;
                var request = context.Request;
                foreach (string key in request.QueryString.Keys) dic[key] = request.QueryString[key];
                foreach (string key in request.Form.Keys) dic[key] = request.Form[key];

                var stream = context.Request.InputStream;
                stream.Seek(0, System.IO.SeekOrigin.Begin);
                stream.Position = 0;
                using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))
                {
                    IDictionary<string, JToken> data = JsonConvert.DeserializeObject<JObject>(sr.ReadToEnd());
                    data.ForEach(p => dic[p.Key] = p.Value);
                }

                return dic;
            }
    ///
     <summary>
            
    /// 对象属性复制,该方法依赖HttpContent请求
            
    /// </summary>
            
    /// <param name="target"></param>
            
    /// <param name="source"></param>
            private void TryUpdateModel(IMember target, IMember source)
            {
                object value = null;
                if (target == null)
                {
                    target = new ThreeMMember();
                }
                var PropertyList = source.GetType().GetProperties();
                var props = PropertyList.Select(p => p.Name).Join(GetPostData().Keys.ToArray(), p => p, p => p, (a, b) => a).Except(new List<string> { "Code" });
                foreach (var prop in props)
                {
                    var pp = PropertyList.FirstOrDefault(p => p.Name == prop);
                    value = pp.GetValue(source);
                    var att = pp.GetCustomAttributes(typeof(BsonElementAttribute), trueas BsonElementAttribute[];
                    var pp1 = att.Any() ? att.FirstOrDefault().ElementName : prop;
                    target.SetProperty(pp1, value);
                }
            }
  • 相关阅读:
    有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
    C编程实现2的1000次方(使程序中的n=1000即可)
    有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面m个数。
    有一个字符串,内有若干字符,输入一个字符,要求程序将字符串中该字符删去。
    使用静态变量的方法求n!
    数组排序:冒泡法和选择法
    使用函数的递归调用来解决Hanoi(汉诺)塔问题。
    VC5509的通用GEL代码
    字、字节和位的关系
    安装JDK后环境变量的配置
  • 原文地址:https://www.cnblogs.com/itjeff/p/4514620.html
Copyright © 2011-2022 走看看