C#——利用反射输出对象的属性值(可排除含visual关键字的属性)

在使用.net的ORM时用到了EF来操作数据库,使用的是基于DB的CodeFirst模式,其自动根据数据库中的每个表生成了相应的类,但生成的类中并没有定义toString方法。且对于表中的外键主键约束该类中还多了许多visual的属性。
需求是用一种通用的方法来方便的在控制台输出其不包含visual的属性值。

代码

        /// <summary>
        ///  利用反射遍历输出一个对象中所有的属性和值,且排除含visual关键字的属性
        /// </summary>
        /// <param name="obj"></param>
        public static void PrintProperties(Object obj)
        {
            Type type = obj.GetType();
            foreach (PropertyInfo p in type.GetProperties())
            {
                //如果要输出所有属性,将if语句块删去即可
                if (p.GetMethod.IsVirtual == true)
                {
                    continue;
                }
                Console.Write(p.Name+":");
                Console.WriteLine(p.GetValue(obj));
            }
        }

        /// <summary>
        /// 简单的将对象的所有属性转化为json,且排除含visual关键字的属性
        /// </summary>
        /// <param name="obj"></param>
        public static string ToStringProperties(Object obj)
        {
            StringBuilder jsonString = new StringBuilder();
            jsonString.Append("{");
            Type type = obj.GetType();
            
            foreach (PropertyInfo p in type.GetProperties())
            {
                //排除含visual关键字的属性
                if (p.GetMethod.IsVirtual == true)
                {
                    continue;
                }  
  
                jsonString.Append(p.Name);//将属性名称赋值给字符串
                jsonString.Append(":");
                jsonString.Append(p.GetValue(obj,null));
                jsonString.Append(",");
                
            }
            jsonString.Remove(jsonString.Length - 1, 1);
            jsonString.Append("}");
            return jsonString.ToString();
        }

排除visual的属性用到了以下方法:

	var isVirtual = typeof(TestClass).GetMethod("Message").IsVirtual;

使用C#输出对象所有属性

		//c#遍历一个对象中所有的属性和值
        public static void PrintProperties(Object obj)
        {
            Type type = obj.GetType();
            foreach (PropertyInfo p in type.GetProperties())
            {
                Console.WriteLine(p.GetValue(obj));
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值