dynamic对象如何通过反射获取其所有属性名称

时间:2023-01-02 11:18:43
dynamic对象如何通过反射获取其所有属性名称?
例如dynamic userInfo = app.Get("me");
但我不知道userInfo对象到底有哪些属性,能否通过反射的方式获取这些属性?

9 个解决方案

#1



// User为一个Class
Type t = User.GetType();
// 获取类的所有公共属性
System.Reflection.PropertyInfo[] pInfo = t.GetProperties();
// 遍历公共属性
foreach(System.Reflection.PropertyInfo pio in pInfo){
            string fieldName = pio.Name;        // 公共属性的Name
            Type pioType = pio.PropertyType;    // 公共属性的类型
}


查一查MSDN或者,或者自己在vs环境中写一写,利用VS的联想功能,就能知道它们怎么用了。

#2


这个答案得出的结果不是预期的。

引用 1 楼 lisliefor 的回复:
C# code

// User为一个Class
Type t = User.GetType();
// 获取类的所有公共属性
System.Reflection.PropertyInfo[] pInfo = t.GetProperties();
// 遍历公共属性
foreach(System.Reflection.PropertyInfo pio in pInfo){
          ……

#3


 private void dynamicRun()
      {
          string filePath = @"D:\ScheduledJob\DLL\ScheduleJob.dll";
          string typeName = "ScheduleJob.DailyInfo";
          // string methodName = "SendDailyInfo";
          string methodArgs = "hello,this is dynamic Demo";

          try
          {
              //载入Assembly
              Assembly a = Assembly.LoadFrom(filePath);

              //应用dynamic自动实现反射
              dynamic o = a.CreateInstance(typeName, false, BindingFlags.CreateInstance, null, null, null, null);

              //这里直接写要执行的方法和参数              o.SendDailyInfo(methodArgs);
          }
          catch (Exception ex)
          {
              Console.WriteLine("Cannot run dynamic " + ex.InnerException);
          }
      }

#4


学习学习

#5


引用 2 楼 pjw100 的回复:
这个答案得出的结果不是预期的。

那你预期的是什么结果?

#6


引用 5 楼 ojlovecd 的回复:
引用 2 楼 pjw100 的回复:

这个答案得出的结果不是预期的。


那你预期的是什么结果?

预期的结果:它有多少属性就输出多少属性名。
但这里明显不是。输出来的是Items, Count, Value....明显不是我这个动态对象的属性。

#7


引用 6 楼 pjw100 的回复:
引用 5 楼 ojlovecd 的回复:

引用 2 楼 pjw100 的回复:

这个答案得出的结果不是预期的。


那你预期的是什么结果?

预期的结果:它有多少属性就输出多少属性名。
但这里明显不是。输出来的是Items, Count, Value....明显不是我这个动态对象的属性。

如果你的这个userInfo 继承的是其它的类,反射之后当然会把这些继承的属性也找出来

#8


dynamic也是一个object。其它的说了也是白说。

#9


收藏备用

#1



// User为一个Class
Type t = User.GetType();
// 获取类的所有公共属性
System.Reflection.PropertyInfo[] pInfo = t.GetProperties();
// 遍历公共属性
foreach(System.Reflection.PropertyInfo pio in pInfo){
            string fieldName = pio.Name;        // 公共属性的Name
            Type pioType = pio.PropertyType;    // 公共属性的类型
}


查一查MSDN或者,或者自己在vs环境中写一写,利用VS的联想功能,就能知道它们怎么用了。

#2


这个答案得出的结果不是预期的。

引用 1 楼 lisliefor 的回复:
C# code

// User为一个Class
Type t = User.GetType();
// 获取类的所有公共属性
System.Reflection.PropertyInfo[] pInfo = t.GetProperties();
// 遍历公共属性
foreach(System.Reflection.PropertyInfo pio in pInfo){
          ……

#3


 private void dynamicRun()
      {
          string filePath = @"D:\ScheduledJob\DLL\ScheduleJob.dll";
          string typeName = "ScheduleJob.DailyInfo";
          // string methodName = "SendDailyInfo";
          string methodArgs = "hello,this is dynamic Demo";

          try
          {
              //载入Assembly
              Assembly a = Assembly.LoadFrom(filePath);

              //应用dynamic自动实现反射
              dynamic o = a.CreateInstance(typeName, false, BindingFlags.CreateInstance, null, null, null, null);

              //这里直接写要执行的方法和参数              o.SendDailyInfo(methodArgs);
          }
          catch (Exception ex)
          {
              Console.WriteLine("Cannot run dynamic " + ex.InnerException);
          }
      }

#4


学习学习

#5


引用 2 楼 pjw100 的回复:
这个答案得出的结果不是预期的。

那你预期的是什么结果?

#6


引用 5 楼 ojlovecd 的回复:
引用 2 楼 pjw100 的回复:

这个答案得出的结果不是预期的。


那你预期的是什么结果?

预期的结果:它有多少属性就输出多少属性名。
但这里明显不是。输出来的是Items, Count, Value....明显不是我这个动态对象的属性。

#7


引用 6 楼 pjw100 的回复:
引用 5 楼 ojlovecd 的回复:

引用 2 楼 pjw100 的回复:

这个答案得出的结果不是预期的。


那你预期的是什么结果?

预期的结果:它有多少属性就输出多少属性名。
但这里明显不是。输出来的是Items, Count, Value....明显不是我这个动态对象的属性。

如果你的这个userInfo 继承的是其它的类,反射之后当然会把这些继承的属性也找出来

#8


dynamic也是一个object。其它的说了也是白说。

#9


收藏备用