利用反射获取一个类实例的所有属性名称和值 拼接为字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用反射获取一个类实例的所有属性名称和值 拼接为字符串相关的知识,希望对你有一定的参考价值。

需要一个功能:获取一个类实例的所有属性名称和值并拼接为字符串,然后进行处理。代码保存在此以备后用。

建立一个类文件ClassToString.cs 

以下代码可以直接使用,参数为一个类的实例,返回的是一个数组,[0]为属性名的拼接,[1]为属性Value的拼接.

对于类的属性类型没有限制,但是如果没有全部赋值的话,Value会范围默认值,

比如int为0,String为空,DateTime为0001/1/1 0:00:00,0,0,0

需要有需要的话可以在拼接的时候判断进行相应处理

ClassToString.cs代码如下:

技术分享
using System;

public class ClassToString
{
    public  ClassToString()
    {
        //
        // TODO: 在此处添加构造函数逻辑
        //
    }

    /// <summary>
    /// 把一个类的实例所有属性名称和值返回一个数组,【0】为名称,【1】为值,通过“,”进行分割组合
    /// </summary>
    /// <typeparam name="T">类实例</typeparam>
    /// <param name="t">类实例</param>
    /// <returns></returns>
    public string[] ClassToArray<T>(T t)
    {

        string tStrName = string.Empty;
        string tStrValue = string.Empty;

        try
        {
            System.Reflection.PropertyInfo[] properties = t.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);            

            foreach (System.Reflection.PropertyInfo item in properties)
            {
                string name = item.Name;
                object value = item.GetValue(t, null);
                if (item.PropertyType.IsValueType || item.PropertyType.Name.StartsWith("String"))
                {
                    tStrName += name + ",";
                    tStrValue += value + ",";
                }
                else
                {
                    ClassToArray(value);
                }

            }
            
            String[] StringNameValue = new String[] { tStrName.TrimEnd(,), tStrValue.TrimEnd(,) };//去除最后一个多余的“,”
            return StringNameValue;
        }
        catch (Exception e)
        {
            String[] StringNameValue = new String[] { "Error", e.ToString() };
            return StringNameValue;
        }

    }
}
View Code

 

使用实例:

首先是一个定义了属性的类

Product.cs代码如下:

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Product 的摘要说明
/// </summary>
public class Product
{

    /// <summary>
    /// 商品ID
    /// </summary>
    private int _id;

    /// <summary>
    /// 商品品号
    /// </summary>
    private string _num;

    /// <summary>
    /// 条形码
    /// </summary>
    private int _barcode;

    /// <summary>
    /// 颜色/规格
    /// </summary>
    private string _color;

    /// <summary>
    /// 单位
    /// </summary>
    private string _unit;

    /// <summary>
    /// 箱/个
    /// </summary>
    private int _smallUnit;

    /// <summary>
    /// 件/个
    /// </summary>
    private int _largeUnit;

    /// <summary>
    /// 建议零售价
    /// </summary>
    private float _price;

    /// <summary>
    /// 回收站标记
    /// </summary>
    private int _isEnable;

    /// <summary>
    /// 添加时间
    /// </summary>
    private DateTime _datetime;

    /// <summary>
    /// 备注
    /// </summary>
    private string _remark;

    /// <summary>
    /// 最新成本
    /// </summary>
    private float _cost;

    /// <summary>
    /// 数量
    /// </summary>
    private int _number;

    /// <summary>
    /// 平均成本
    /// </summary>
    private float _averageCost;

    /// <summary>
    /// 仓库库位
    /// </summary>
    private int _wareHouse;

    /// <summary>
    /// 最后入库时间
    /// </summary>
    private DateTime _lastCostTime;

    /// <summary>
    /// 商品总数量(此字段为查询数据库得到)
    /// </summary>
    private int _count;

    /// <summary>
    /// 单品总金额(此字段为查询数据库得到)
    /// </summary>
    private float _money;

    /// <summary>
    /// 全部商品总金额(此字段为查询数据库得到)
    /// </summary>
    private float _moneySum;

    public int Id
    {
        get
        {
            return _id;
        }

        set
        {
            _id = value;
        }
    }

    public string Num
    {
        get
        {
            return _num;
        }

        set
        {
            _num = value;
        }
    }

    public int Barcode
    {
        get
        {
            return _barcode;
        }

        set
        {
            _barcode = value;
        }
    }

    public string Color
    {
        get
        {
            return _color;
        }

        set
        {
            _color = value;
        }
    }

    public string Unit
    {
        get
        {
            return _unit;
        }

        set
        {
            _unit = value;
        }
    }

    public int SmallUnit
    {
        get
        {
            return _smallUnit;
        }

        set
        {
            _smallUnit = value;
        }
    }

    public int LargeUnit
    {
        get
        {
            return _largeUnit;
        }

        set
        {
            _largeUnit = value;
        }
    }

    public float Price
    {
        get
        {
            return _price;
        }

        set
        {
            _price = value;
        }
    }

    public int IsEnable
    {
        get
        {
            return _isEnable;
        }

        set
        {
            _isEnable = value;
        }
    }

    public DateTime Datetime
    {
        get
        {
            return _datetime;
        }

        set
        {
            _datetime = value;
        }
    }

    public string Remark
    {
        get
        {
            return _remark;
        }

        set
        {
            _remark = value;
        }
    }

    public float Cost
    {
        get
        {
            return _cost;
        }

        set
        {
            _cost = value;
        }
    }

    public int Number
    {
        get
        {
            return _number;
        }

        set
        {
            _number = value;
        }
    }

    public float AverageCost
    {
        get
        {
            return _averageCost;
        }

        set
        {
            _averageCost = value;
        }
    }

    public int WareHouse
    {
        get
        {
            return _wareHouse;
        }

        set
        {
            _wareHouse = value;
        }
    }

    public DateTime LastCostTime
    {
        get
        {
            return _lastCostTime;
        }

        set
        {
            _lastCostTime = value;
        }
    }

    public int Count
    {
        get
        {
            return _count;
        }

        set
        {
            _count = value;
        }
    }

    public float Money
    {
        get
        {
            return _money;
        }

        set
        {
            _money = value;
        }
    }

    public float MoneySum
    {
        get
        {
            return _moneySum;
        }

        set
        {
            _moneySum = value;
        }
    }

    public Product()
    {
        //
        // TODO: 在此处添加构造函数逻辑
        //
        
    }
}
View Code

 

调用:

Default.aspx.cs代码如下 实例中只赋值了部分属性,但输出的是完整的名称和值,如果只需要赋值的属性,可在拼接字符串的时候进行处理。

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    public Product pd = new Product();
    public string Name;
    public string Value;

    protected void Page_Load(object sender, EventArgs e)
    {
        pd.Id = 1;
        pd.Remark = "备注";
        pd.Color = "红色";

        ClassToString cts = new ClassToString();

        string[] str=cts.ClassToArray(pd);
        Name = str[0];
        Value = str[1];
       

    }
}
View Code

 

Default.aspx代码如下

技术分享
<div>
       <%=Name+"<br/>"+Value %>
    </div>
View Code

 

效果

Id,Num,Barcode,Color,Unit,SmallUnit,LargeUnit,Price,IsEnable,Datetime,Remark,Cost,Number,AverageCost,WareHouse,LastCostTime,Count,Money,MoneySum
1,,0,红色,,0,0,0,0,0001/1/1 0:00:00,备注,0,0,0,0,0001/1/1 0:00:00,0,0,0

 

以上是关于利用反射获取一个类实例的所有属性名称和值 拼接为字符串的主要内容,如果未能解决你的问题,请参考以下文章

java反射获取属性值

java如何通过反射获取包中所有的类?

.Net C# 反射,了解只需3分钟

java 遍历 类属性的属性值

java 使用反射获取属性名,和值

java 使用反射获取属性名,和值