解析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         }

希望可以幫助到遇到相同麻煩的童鞋~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM