c#设置对象属性——反射实体设置变量

前台如果只传递了一两个数据,在后台请求获取数据设置属性值还能够接受,但是如果传递了大量的数据,就得多次HttpRequest reques[“XXX”]请求获取数据设置属性值,输入的代码量就很大,而且相当耗费时间,这种费时费力的方法是难以接受的。下面为大家提供一个取巧的方法,获取请求数据就变的很简单了,而且可以节省时间。话不多说,直接上代码:

C#代码如下:

/// <summary>
    /// 设置对象属性——反射实体设置变量
    /// </summary>
    /// <param name="obj">对象</param>  /// <param name="set">设置属性操作</param>
    protected void Set_Property(object obj,Del_Property set) {
        string param = string.Empty,type;
        PropertyInfo[] propertys = obj.GetType().GetProperties();
        foreach (PropertyInfo p in propertys){
            //获取请求参数
            object[] columns = p.GetCustomAttributes(typeof(JsonPropertyAttribute), true);
            if (columns.Length > 0){
                //设置属性值
                param = request[(columns[0] as JsonPropertyAttribute).PropertyName];
                if (param != null){
                    type = p.PropertyType.ToString();
                    type = Regex.Match(type, type.IndexOf("[") > -1 ? @"(?<=\[\w+\.)[^\]]+" : @"(?<=\.)\w+").Value;
                    switch (type) {
                        case "Boolean": p.SetValue(obj, Boolean.Parse(param), null); break;
                        case "Byte": p.SetValue(obj, Byte.Parse(param), null); break;
                        case "Decimal": p.SetValue(obj, Decimal.Parse(param), null); break;
                        case "DateTime": p.SetValue(obj, DateTime.Parse(param), null); break;
                        case "Int16": p.SetValue(obj, Int16.Parse(param), null); break;
                        case "Int32": p.SetValue(obj, Int32.Parse(param), null); break;
                        case "Int64": p.SetValue(obj, Int64.Parse(param), null); break;
                        case "Single": p.SetValue(obj, Single.Parse(param), null); break;
                        case "Entity": ; break;
                        default: p.SetValue(obj, param, null); break;
                    }
                }
            }
        }
        if (set != null) set(obj);
    }

示例:

using System;
using System.Data;
using System.Collections.Generic;
using DataObject.Attrib;
using Newtonsoft.Json;
//部分实体
namespace TiaoCeng.Entity
{
    /// <summary>
    /// 订单
    /// </summary>
    [DBTable(Name = "[Orders]",PrimaryKey="or_id")]
    public class OrdersModel : DataObject.DataFactory.DataModule<OrdersModel>
    {

        /// <summary>
        ///订单构造函数
        /// </summary>
        public OrdersModel() : base() { }

        /// <summary>
        ///订单构造函数
        /// </summary>
        /// <param name="constring">数据库连接字符串</param>
        public OrdersModel(string constring) : base(constring) { }

        /// <summary>
        /// 订单id
        /// </summary>
        [DBColumn(Name = "or_id", Size = 4, dbType = SqlDbType.Int, PrimaryKey = true)]
        [JsonProperty(PropertyName = "or_id")]
        public int? Or_id { get; set;}

        /// <summary>
        /// 购买者id,为0表示为非用户id
        /// </summary>
        [DBColumn(Name = "m_id", Size = 4, dbType = SqlDbType.Int)]
        [JsonProperty(PropertyName = "member")]
        public MemberModel Member { get; set; }
/// <summary>
        /// 购买者联系电话
        /// </summary>
        [DBColumn(Name = "or_buyerTel", Size = 50, dbType = SqlDbType.VarChar)]
        [JsonProperty(PropertyName = "or_buyertel")]
        public string Or_buyerTel { get; set;}

        /// <summary>
        /// 购买者地址
        /// </summary>
        [DBColumn(Name = "or_buyerAddress", Size = 200, dbType = SqlDbType.NVarChar)]
        [JsonProperty(PropertyName = "or_buyeraddress")]
        public string Or_buyerAddress { get; set;}/// <summary>
        /// 已付款金额
        /// </summary>
        [DBColumn(Name = "or_payPrice", Size = 9, dbType = SqlDbType.Decimal)]
        [JsonProperty(PropertyName = "or_payprice")]
        public decimal? Or_payPrice { get; set;}/// <summary>
        /// 订单状态(0购物车,1待核实, 2待付款,3付款成功,4已发货,5确认收货,6申请退款,7退款成功,8退款失败)
        /// </summary>
        [DBColumn(Name = "or_progressState", Size = 4, dbType = SqlDbType.Int)]
        [JsonProperty(PropertyName = "or_progressstate")]
        public int? Or_progressState { get; set;}

        /// <summary>
        /// 订单进度说明
        /// </summary>
        [DBColumn(Name = "or_progress", Size = 1000, dbType = SqlDbType.NVarChar)]
        [JsonProperty(PropertyName = "or_progress")]
        public string Or_progress { get; set;}/// <summary>
        /// 状态(0待审核,1审核通过,2审核失败,3回收站,4.作废)
        /// </summary>
        [DBColumn(Name = "or_state", Size = 1, dbType = SqlDbType.TinyInt)]
        [JsonProperty(PropertyName = "or_state")]
        public byte? Or_state { get; set; }

     ....

}

//实体对象OrdersModel _order = new OrdersModel();//设置订单信息
Set_Property(_order, (obj) => {
  _order.Member = new MemberModel() { M_id = m_id };
  if (!string.IsNullOrEmpty(request["paydate"])) _order.Or_payDate = DateTime.Parse(request["paydate"] + " 00:00:00");
  if (!string.IsNullOrEmpty(request["shipdate"])) _order.Or_shipDate = DateTime.Parse(request["shipdate"] + " 00:00:00");
  _order.Or_price = _price;
  _order.Or_amount = _num;
  _order.Or_getIntegral = _getIntegral;
});

这样一来,不管前台传递多少数据,后台只需要将实体对象传递进去就可以省时省力的完成设置属性值的操作,当然前台的请求参数要与实体的拓展属性名保持一致。是不是很方便,快来试一试吧。有什么好的方法或者建议可以联系我,我们一起探讨。

新浪微博(求关注)地址:

http://weibo.com/zhengdjin

时间: 2024-11-10 10:33:00

c#设置对象属性——反射实体设置变量的相关文章

C#通过属性名字符串获取、设置对象属性值

目录 #通过反射获取对象属性值并设置属性值 #获取对象的所有属性名称及类型 #判断对象是否包含某个属性 #通过反射获取对象属性值并设置属性值 0.定义一个类 public class User { public int Id { get; set; } public string Name { get; set; } public string Age { get; set; } } 1.通过属性名(字符串)获取对象属性值 User u = new User(); u.Name = "lily&

Asp.net动态页面静态化之输出对象属性(实体关联)

Asp.net动态页面静态化之输出对象属性(实体关联) 模板引擎不单单可以输出单一的数据,还能直接输出对象的属性 using System; using System.Collections.Generic; using System.Linq; using System.Web; using NVelocity.Runtime; using NVelocity; using NVelocity.App; namespace czbk { /// <summary> /// Handler2

get定义方法——Javascript设置对象属性为&quot;只读&quot;

get 定义方法时,表示该方法只能被读取 参考:https://www.cnblogs.com/season-huang/p/seasonhuang.html 原文地址:https://www.cnblogs.com/marquess/p/12600485.html

Jquery实现点击当前radio button设置选中属性,其它设置非选中属性

一.HTML代码: <div class="ques-tc-r" id="question_type"> <ul class="clearfix"> <li class="select-cur"> <input type="radio" value="1" name="question_type" checked="

java中的反射,知道类名创建类,还可以设置私有属性的值

刚刚学到了反射,感觉反射的功能好强大,所以想写篇博客记录下自己的学习成果. 利用反射来创建对象. Class c1=Class.forName("test.Person");//通过类名来创建类,这里test.person只是一个类名,.这个person类代码在//本文最下方 /** *情况1:调用无参的构造方法来创建对象 */ Person p=c1.newInstance();//这样就创建好了 /** *情况2:调用有参构造方法 */ Constructor cs=c1.getC

cookie设置httponly属性防护XSS攻击

攻击者利用XSS漏洞获取cookie或者session劫持,如果这里面包含了大量敏感信息(身份信息,管理员信息)等,攻击这里用获取的COOKIE登陆账号,并进行非法操作. COOKIE设置httponly属性可以化解XSS漏洞攻击带来的窃取cookie的危害. PHP中COOKIE设置方法: <?php setcookie("xsstest", "xsstest", time()+3600, "/", "", false

firefox(火狐)下 js中设置checkbox属性checked=&quot;checked&quot;已有,但复选框却不显示勾选的原因

刚看到问题时以为是浏览器兼容性的原因,ie.google都能正常显示. 网上查询之后发现是jQuery的attr()方法用的不恰当. jQuery1.6之前使用attr()可以修改 ,从jQuery 1.6开始,attr()方法返回undefined尚未设置的属性,对于设置checked这种类型的属性使用prop()来设置. jquey官网给出的两个方法的说明: 获取匹配元素集中第一个元素的属性值,或为每个匹配元素设置一个或多个属性. 并指出检索和修改DOM属性,如checked,selecte

区分元素特性attribute和对象属性property

其实attribute和property两个单词,翻译出来都是属性,但是<javascript高级程序设计>将它们翻译为特性和属性,以示区分.本文将详细介绍特性和属性的不同之处 定义 元素特性attribute是指HTML元素标签的特性 下面的id.class.title.a都是特性,其中a叫做自定义特性 <div id="id1" class="class1" title="title1" a='a1'></div

js之oop &lt;二&gt; 对象属性

js中对象属性可以动态添加和删除.删除对象属性用delete关键字. function obj(){ } var oo = new obj(); oo.a = "a"; oo.b = "b"; oo.a; //输出a oo.b; //输出b delete oo.a; oo.a; //输出undefined 在js中对象的属性以键值对的方式来体现,且(在遍历时)无序.js中属性名(也就是key)可以用点来访问(或赋值),也可以用中括号key值来访问(或赋值)(用中括号