借鉴了http://stackoverflow.com/questions/4473928/c-sharp-dynamic-string-property-path

 

 

public class ReflectUtil
   {
       public static object ReflectOnPath(object o, string path)
       {
           object value = o;
           string[] pathComponents = path.Split('.');
           foreach (var component in pathComponents)
           {
               var x = component.Split(':');

               value = value.GetType().GetProperty(x[0]).GetValue(value, null);

               if (value.GetType().IsArray)
               {
                   int[] index = null;
                   if (x.Length > 1)
                       index = x.Skip(1).Take(int.MaxValue).Select(y => int.Parse(y)).ToArray();
                   if (index != null) value = ((Array)value).GetValue(index);
               }
           }
           return value;
       }
   }

 

 

 

Example:

[TestMethod]
       public void TestGetValue()
       {
           var o = new DistributeCfg
           {
               Configs = new[]
               {
                   new Config.Config
                   {
                       AppType = "v",
                       CallbackUrl = "fasdfasdf",
                       Key = "k",
                        NoticePostDataSetting = new PostDataSetting
                        {
                             Args = new Arg[]
                             {
                                  new Arg
                                  {
                                       Name = "name1",
                                       Value = "a.b.c"
                                  },
                                   new Arg
                                  {
                                       Name = "name2",
                                       Value = "a.b.c"
                                  }
                             }
                        },
                         PredictPostDataSetting  = new PostDataSetting
                        {
                             Args = new Arg[]
                             {
                                  new Arg
                                  {
                                       Name = "name1",
                                       Value = "Predict.b.c"
                                  },
                                  new Arg
                                  {
                                       Name = "name2",
                                       Value = "Predict.b.c"
                                  }
                             },
                              DeleteFlgSetting = new DeleteFlgSetting
                              {
                                   Audit = "1,2",
                                    Delete = "9",
                                     Pass = "10"
                              }
                        },
                   },
                     new Config.Config
                   {
                       AppType = "v",
                       CallbackUrl = "asdfasdfasdf",
                       Key = "k",
                        NoticePostDataSetting = new PostDataSetting
                        {
                             Args = new Arg[]
                             {
                                  new Arg
                                  {
                                       Name = "name1",
                                       Value = "a.b.c"
                                  },
                                   new Arg
                                  {
                                       Name = "name2",
                                       Value = "a.b.c"
                                  }
                             }
                        },
                         PredictPostDataSetting  = new PostDataSetting
                        {
                             Args = new Arg[]
                             {
                                  new Arg
                                  {
                                       Name = "name1",
                                       Value = "Predict.b.c"
                                  },
                                  new Arg
                                  {
                                       Name = "name2",
                                       Value = "Predict.b.c"
                                  }
                             },
                              DeleteFlgSetting = new DeleteFlgSetting
                              {
                                   Audit = "1,2",
                                    Delete = "9",
                                     Pass = "10"
                              }
                        },
                   }
               }
           };

           //var d = o.GetType().GetField("Configs").GetValue(o);

           string path = "Configs:0.PredictPostDataSetting.Args:0.Name";
           Console.WriteLine(ReflectUtil.ReflectOnPath(o, path));
           var p = o.GetType().GetProperty("Configs");
           //p.GetValue()
           //var array = o.GetType().GetProperty("Configs").GetType().IsArray;

           //var value = o.GetType().GetProperty("Configs").GetValue(o);

 

       }

       [TestMethod]
       public void TestValue()
       {
           var a = new A();
           a.Field = new B();
           a.Field.SubField = 10;

           string path = "Field.SubField";
           Console.WriteLine(ReflectUtil.ReflectOnPath(a, path));
       }

最新文章

  1. iOS多线程主题
  2. python征程3.0(python对象)
  3. C语言 05 数组
  4. Spring事务传播机制&隔离级别
  5. 代码重构-1 对参数中有 bool值的拆分
  6. Oracle分析函数的项目实践实例
  7. .NET中的弱引用
  8. 关于debug和release 以及new 和delete
  9. Hadoop Streaming框架学习2
  10. Weblogic 12c 集群部署和session复制
  11. ASP.NET MVC计划任务实现方法(定时执行某个功能)
  12. 如何将Tomcat添加到服务中【笔记】
  13. HighCharts初测试
  14. Async 详解
  15. Xshell配置ssh使用密钥公钥(publice key)登录
  16. Daemontools和Supervisor管理linux常驻进程
  17. java数组变量
  18. geoserver 开发1
  19. 文档类型、DOCTYPE切换和浏览器模式
  20. LOJ #2473. 「九省联考 2018」秘密袭击

热门文章

  1. Chapter 5: Container
  2. MySQL创建数据表
  3. PHP面向对象中常用的关键字和魔术方法
  4. CSS样式选择器
  5. PHP_string
  6. 看了这篇文章,Java编程速度我都惊呆了
  7. Android WindowManager悬浮窗:不需要申请权限实现悬浮
  8. Day04_JAVA语言基础第四天
  9. threeSum_0
  10. 关于limit hashlimit资料整理