class xxx { public int ma = 20; private int mb = 100; private string sa = "abc"; private string sb = "33333"; private string sc = "ewr"; } // 通过反射的形式获得一个对象的所有字段名字和值的描述集合 public static string MSreflection<T>(T type, int ISeveryHH) { Type ty = type.GetType(); FieldInfo[] fiel = ty.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); string sall = ""; string HH = ISeveryHH == 1 ? Environment.NewLine : ""; foreach (FieldInfo fil in fiel) { object onow = fil.GetValue(type); string sone = onow != null ? onow.ToString() : "NULL"; sall += "[" + fil.Name + "=" + sone + "] " + HH; } return sall; }
xxx mx = new xxx(); MSreflection<xxx>(mx, 1);
class test { Dictionary<int, int> dary = new Dictionary<int, int>(); List<List<int>> sary = new List<List<int>>(); List<int> nary = new List<int>(); xxx mx = new xxx(); wori wr = new wori(); Tuple<Type, List<int>, string, int, long> tup = new Tuple<Type, List<int>, string, int, long>(typeof(int),null, null, 0, 1); }
test ttt = new test(); MSreflection<test>(ttt, 1);
http://omegacoder.com/?p=1063
在这基础上修改
谢谢,我测试后,发现原文提供的方法有很多局限性,而且没有数据的话还报错,想要使用可能还要做很多细致的工作,我也测试了序列化为json和XML后,发现首先需要引用一个空间,然后后面的操作很繁琐,也有很多不足的地方,包括XML不能序列化私有字段,不支持DIctionary的直接序列化(要报错),序列化后的数据可视性很不友好。
对于简单的类,MSreflection<T>()实现了只需要一句话就实现了描述。但是我还想找到一个能观察更多对象的方法和类。
我觉得显示一个对象的所有数据本意是观察,不干扰业务逻辑,同时也不想为了观察还特意去做较多的匹配工作,有没有比较方便的方法或者类能够使得我们在需要观察数据时,不需要额外去做一些工作,只调用一个方法即可显示所有的数据呢?如果没有,要自己去做,应该从哪些方面考虑思路呢?
@飞翔蚂蚁:
局限是肯定的,这需要自己扩展;
报错可以控制的;
对象序列化为json,可以使用 Json.net 第三方组件,开源的,你可以参考;
额外工作是要做的,没这么免费的午餐;