解析dynamic对象

最近做一个项目,需要解析由JSon转换过来的dynamic对象,JSon的解析可以直接使用fastJSon,但是如果不知道具体对象的话,后续的取值总是需要重复性的解析dynamic对象,很是麻烦,后来自己写了一个函数从数据结构的层面对dynamic进行解析,函数代码如下,函数不难理解,但是在后续取值的时候方便了很多,取值时可仿照:o.GetValue("Name"),则会返回对象o中key值为“Name”的Value,不管这个key嵌套多深:

 1         /// <summary>
 2         /// Gets the value.
 3         /// </summary>
 4         /// <param name="o">The object.</param>
 5         /// <param name="key">The key.</param>
 6         /// <returns>System.Object.</returns>
 7         public static object GetValue(this object o,string key)
 8         {
 9             if(o is List<object>)
10             {
11                 foreach(var oo in (List<object>)o)
12                 {
13                     var result= GetValue(oo, key);//递归返回匹配的值
14                     if (result != null)
15                         return result;
16                 }
17             }
18             else if(o is object[])
19             {
20                 foreach(var oo in (object[])o)
21                 {
22                     var result = GetValue(oo, key);//递归返回匹配的值
23                     if (result != null)
24                         return result;
25                 }
26             }
27             else if (o is IDictionary<string, object>)
28             {
29                 foreach (var property in (IDictionary<String, Object>)o)
30                 {
31                     if (property.Key == key || property.Key == key.ToLower() || property.Key == key.ToUpper())
32                         return property.Value;
33                 }
34                 //如果上面的遍历没有结果,则该值可能嵌套在property.Value里面,需要递归解析
35                 foreach (var property in (IDictionary<String, Object>)o)
36                 {
37                     var result = GetValue(property.Value, key);//递归返回匹配的值
38                     if (result != null)
39                         return result;
40                 }
41             }
42             return null;//没有匹配值,返回null
43         }

希望可以帮助到遇到相同麻烦的童鞋~~

posted @ 2017-02-20 14:46  WCode  阅读(1749)  评论(0编辑  收藏  举报