標籤:
最近做支付,要擷取使用者的openid,調用介面後返回的是json格式的資料,我想在c#後台把資料逐一取出,網上查了查,找到以下方法:
1.首先調用介面,要有一個post資料到指定url並返回資料的函數:
protected string PostXmlToUrl(string url, string postData) { string returnmsg = ""; using (System.Net.WebClient wc = new System.Net.WebClient()) { returnmsg = wc.UploadString(url, "POST", postData); } return returnmsg; }
post的資料格式可以是
url的參數格式(a=1&b=2&c=3....)
xml格式(<xml>....</xml>)
返回的資料格式由介面確定。
2.方法調用:
string post_data = "appid=" + appId + "&secret=" + secret + "&code=" + code + "&grant_type=authorization_code"; string requestData = PostXmlToUrl("https://api.weixin.qq.com/sns/oauth2/access_token", post_data);
這個介面返回的資料是json格式的,所以得到的requestData就是一段json字串:
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE"}
返回的資料裡面有我需要的openid,接下來利用結構體把openid取出。先定義結構體:
public struct authorization { public string access_token { get; set; } //屬性的名字,必須與json格式字串中的"key"值一樣。 public string expires_in { get; set; } public string refresh_token { get; set; } public string openid { get; set; } public string scope { get; set; } }
利用序列化資料的類JavaScriptSerializer將json資料轉化為物件類型:
JavaScriptSerializer js = new JavaScriptSerializer(); //執行個體化一個能夠序列化資料的類 authorization auth = js.Deserialize<authorization>(requestData); //將json資料轉化為物件類型並賦值給auth
這樣一轉化,對象auth裡面的4個屬性就會得到相應的值,如此,我就擷取到了介面返回來的openid,就可以在需要的地方使用它了:
wxobPay.openid = auth.openid;
c# 利用結構體擷取json資料