有选择的复制对象,即根据客户端传值来复制对象属性值

复制代码
复制代码
 
有选择的复制对象,即根据客户端传值来复制对象属性值
第一个方法是接收调用方发来的参数列表,此方法很有用。
第二个方法是根据调用方发来的参数来更新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);
            }
        }
复制代码

posted on   itjeff  阅读(195)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2014-05-19 JS常用方法总结,及jquery异步调用后台方法实例

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示