今天学习微信遇到一个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());
思想是一样的,两次反序列化,很简单就看懂了吧。