今天學習微信遇到一個json的解析,但是因為自己的模型思維和思考能力很差一直困擾最后經過詢問解決的問題,其實問題很簡單總結起來就是json的解析:
注釋:今天主要是講怎樣解析json的所以其他方法就只做解釋。
方法一:using System.Web.Script.Serialization;(這個要引用)
//這個方法不推薦,比較繁瑣
string datas = pub.GetOther(url);//這個是返回的一個json字符串微信用戶列表格式即:{"total":2,"count":2,"data":{"openid":["","OPENID1","OPENID2"]},"next_openid":"NEXT_OPENID"}
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> json = (Dictionary<string, object>)serializer.DeserializeObject(datas);//反序列化
if (json.ContainsKey("data"))
{
List<object> lst = new List<object>();
Dictionary<string, object> jsons = (Dictionary<string, object>)json["data"];//重點在這里(看看json字符串的結構就明白了吧,鍵值對data的值又是一個鍵值對所以需要再次轉一次)
object[] datainfos = (object[])jsons["openid"];//這樣才能取到最小單元的鍵值對中的值openid
(object[] datainfos = (object[])jsons["data"];一開始我是這樣寫的這樣是不對的因為jsons["data"]是data的值,這個值是"data":{"openid":["","OPENID1","OPENID2"]}形式的一個鍵值對,所以轉不了object[]數組的
而經過二次的字典轉化后的object[] datainfos = (object[])jsons["openid"];中的jsons["openid"]是["","OPENID1","OPENID2"]這樣的一個數組所以。。不用說了吧
)
}
方法二:using Newtonsoft.Json;(這個要引用)
string datas = pub.GetOther(url);//這個是返回的一個json字符串微信用戶列表格式即: {"total":2,"count":2,"data":{"openid":["","OPENID1","OPENID2"]},"next_openid":"NEXT_OPENID"}
JObject ja = (JObject)JsonConvert.DeserializeObject(datas);
JObject jas = (JObject)JsonConvert.DeserializeObject(ja["data"].ToString());
思想是一樣的,兩次反序列化,很簡單就看懂了吧。