解析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 }
希望可以帮助到遇到相同麻烦的童鞋~~