有沒有辦法將JSON內容反序列化爲C#4動態類型? 跳過建立一堆類以使用DataContractJsonSerializer會很好。 c++
沒有任何第三方DLL文件的簡單對象「字符串JSON數據」: json
WebClient client = new WebClient(); string getString = client.DownloadString("https://graph.facebook.com/zuck"); JavaScriptSerializer serializer = new JavaScriptSerializer(); dynamic item = serializer.Deserialize<object>(getString); string name = item["name"]; //note: JavaScriptSerializer in this namespaces //System.Web.Script.Serialization.JavaScriptSerializer
注意:您也能夠使用自定義對象。 函數
Personel item = serializer.Deserialize<Personel>(getString);
最簡單的方法是: this
只需包含此DLL文件 。 spa
使用以下代碼: code
dynamic json = new JDynamic("{a:'abc'}"); // json.a is a string "abc" dynamic json = new JDynamic("{a:3.1416}"); // json.a is 3.1416m dynamic json = new JDynamic("{a:1}"); // json.a is dynamic json = new JDynamic("[1,2,3]"); /json.Length/json.Count is 3 // And you can use json[0]/ json[2] to get the elements dynamic json = new JDynamic("{a:[1,2,3]}"); //json.a.Length /json.a.Count is 3. // And you can use json.a[0]/ json.a[2] to get the elements dynamic json = new JDynamic("[{b:1},{c:1}]"); // json.Length/json.Count is 2. // And you can use the json[0].b/json[1].c to get the num.
使用Newtonsoft.Json的另外一種方式: 對象
dynamic stuff = Newtonsoft.Json.JsonConvert.DeserializeObject("{ color: 'red', value: 5 }"); string color = stuff.color; int value = stuff.value;
看一下我在CodeProject上寫的文章,該文章準確地回答了這個問題: ip
JSON.NET的動態類型 element
在這裏從新發布全部內容的方法太多了,甚至更少,由於該文章帶有密鑰/必需的源文件的附件。 字符串
將DataSet(C#)與JavaScript一塊兒使用。 一個簡單的函數,用於使用DataSet輸入建立JSON流。 建立JSON內容,例如(多表數據集):
[[{a:1,b:2,c:3},{a:3,b:5,c:6}],[{a:23,b:45,c:35},{a:58,b:59,c:45}]]
只是客戶端,使用eval。 例如,
var d = eval('[[{a:1,b:2,c:3},{a:3,b:5,c:6}],[{a:23,b:45,c:35},{a:58,b:59,c:45}]]')
而後使用:
d[0][0].a // out 1 from table 0 row 0 d[1][1].b // out 59 from table 1 row 1 // Created by Behnam Mohammadi And Saeed Ahmadian public string jsonMini(DataSet ds) { int t = 0, r = 0, c = 0; string stream = "["; for (t = 0; t < ds.Tables.Count; t++) { stream += "["; for (r = 0; r < ds.Tables[t].Rows.Count; r++) { stream += "{"; for (c = 0; c < ds.Tables[t].Columns.Count; c++) { stream += ds.Tables[t].Columns[c].ToString() + ":'" + ds.Tables[t].Rows[r][c].ToString() + "',"; } if (c>0) stream = stream.Substring(0, stream.Length - 1); stream += "},"; } if (r>0) stream = stream.Substring(0, stream.Length - 1); stream += "],"; } if (t>0) stream = stream.Substring(0, stream.Length - 1); stream += "];"; return stream; }