zoukankan      html  css  js  c++  java
  • c# 利用结构体获取json数据

    最近做微信支付,要获取用户的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;
  • 相关阅读:
    PS后期合成,你和大神的差距就这5步!
    欧几里得算法:从证明等式gcd(m, n) = gcd(n, m mod n)对每一对正整数m, n都成立说开去
    谜题:过桥问题
    《世界是数字的》读书笔记第一部分_硬件篇
    完全偶图K(3,3)与完全图K5是否存在平面表示
    Dijkstar算法的数学原理
    LeetCode 141. Linked List Cycle
    LeetCode 155. Min Stack
    LeetCode 160. Intersection of Two Linked Lists
    LeetCode 165.Compare Version Numbers
  • 原文地址:https://www.cnblogs.com/vinsonLu/p/4287544.html
Copyright © 2011-2022 走看看