使用 dynamic 標記解析JSON字符串 http://www.cnblogs.com/taotaodetuer/p/4171327.html
1 string jsonStr = "{\"data\": {\"ssoToken\": \"70abd3d8a6654ff189c482fc4842468c\",\"account\":\"admin\",\"userType\":\"platformAdmin\",\"realName\": \"超級管理員\",\"sex\": 0,\"sexName\":\"男\",\"email\":\"alina_dong@163.com\",\"mobile\":\"15120757948\",\"createdDt\": \"2013-08-16 00:00:00\",\"updatedDt\": \"2014-12-10 00:00:00\" },\"isSuccess\": true}";
當 .Net 程序接收到了這段JSON字符串數據的時候,大家肯定會想到使用 Newtonsoft.Json 去序列化(SerializeObject)和反序列化(DeserializeObject)一個對象。
使用 SerializeObject 的示例:
1 A a = new A(); 2 a.age = 11; 3 a.name = "Jack"; 4 B b = new B(); 5 b.sex = "Man"; 6 //b.money = 12; 7 a.B = b; 8 string str = Newtonsoft.Json.JsonConvert.SerializeObject(a); 9 10 輸出結果:{"age": 11, "name": "Jack", "B": {"sex": "Man", "money": ""}}
使用 DeserializeObject 的示例:
1 string jsonStr = @"{"age": 11, "name": "Jack", "B": {"sex": "Man", "money": ""}}"; 2 var a = Newtonsoft.Json.JsonConvert.DeserializeObject<A>(jsonStr); 3 4 結果:a.age = 11;.......
好了,言歸正傳,如何使用 dynamic 去解析一個Json字符串呢?
1 string jsonStr = "{\"data\": {\"ssoToken\": \"70abd3d8a6654ff189c482fc4842468c\",\"account\":\"admin\",\"userType\":\"platformAdmin\",\"realName\": \"超級管理員\",\"sex\": 0,\"sexName\":\"男\",\"email\":\"alina_dong@163.com\",\"mobile\":\"15120757948\",\"createdDt\": \"2013-08-16 00:00:00\",\"updatedDt\": \"2014-12-10 00:00:00\" },\"isSuccess\": true}"; 2 var loginInfo = JsonConvert.DeserializeObject<dynamic>(jsonStr); 3 var user = loginInfo.data; 4 string ssoToken = user.ssoToken; 5 string account = user.account;
這樣,不用創建loginInfo,user照樣能解析JSON,而且不會因為那邊增加字段報錯啦。
http://www.cnblogs.com/chsword/archive/2012/10/09/jdynamic_testcase.html
JDynamic :支持Json反序列化為Dynamic對象
2010年 .NET 4.0 發布前后,從3.5向4.0遷移,那時也有一些異構系統的需求,主要是和PHP打交道,通信使用的HTTP 格式為JSON。
不過因為接口比較多,也沒有統一規范,PHP端相對是制定接口的一方,所以.NET中反序列化時就顯得被動了一些。
當時看中了Dynamic方便使用的優勢,並以ASP.NET MVC中 ViewBag->ViewData的轉換為參考,制定了一些簡單的測試用例,后期就是完善了這些測試用例,使之可以成為一個簡單易用的工具類。
最近整理了一下,把這個工具類放到了Codeplex上 http://jdynamic.codeplex.com/
以下是一些測試用例:
一、直接獲取值
dynamic json = new JDynamic("1");
json.Value //這樣就可以讀到1
二、JSON對象
dynamic json = new JDynamic("{a:'abc'}");
json.a 可以得到字符串 "abc"
dynamic json = new JDynamic("{a:3.1416}");
json.a 的值是 3.1416m
dynamic json = new JDynamic("{a:1}");
json.a 的值是 1
三、集合
dynamic json = new JDynamic("[1,2,3]");
json.Length/json.Count 這兩個屬性是 3
也可以使用下標來讀取: json[0]/ json[2]
dynamic json = new JDynamic("{a:[1,2,3]}");
可以這樣來讀取 json.a[0]/ json.a[2]
dynamic json = new JDynamic("[{b:1},{c:1}]");
可以這樣來讀取int的值 json[0].b/json[1].c
四、嵌套JSON對象
dynamic json = new JDynamic("{a:{a:1} }");
json.a.a 可以讀出值1.