zoukankan      html  css  js  c++  java
  • asp.net 输出微信自定义菜单json

    这里使用LitJson.dll作json解析。



    微信规定的自定义菜单json样式如下:

     1 {
     2      "button":[
     3      {   
     4           "type":"click",
     5           "name":"今日歌曲",
     6           "key":"V1001_TODAY_MUSIC"
     7       },
     8       {
     9            "type":"click",
    10            "name":"歌手简介",
    11            "key":"V1001_TODAY_SINGER"
    12       },
    13       {
    14            "name":"菜单",
    15            "sub_button":[
    16            {   
    17                "type":"view",
    18                "name":"搜索",
    19                "url":"http://www.soso.com/
    20 "
    21             },
    22             {
    23                "type":"view",
    24                "name":"视频",
    25                "url":"http://v.qq.com/
    26 "
    27             },
    28             {
    29                "type":"click",
    30                "name":"赞一下我们",
    31                "key":"V1001_GOOD"
    32             }]
    33        }]
    34 }


    首先定义Menu类:

    // 自定义菜单实体类
    public class Menu
    {
        public string type { get; set; }
        public string name { get; set; }
        public string key { get; set; }
        public string url { get; set; }
        public bool IsSub = false;
        public IListsub_button = new List();
    }

    写好实体类后,就来编写解析为json的方法,自定义菜单的数量和类型无法确定,所以使用List<Menu>来作为方法的参数,这里需要引用using LitJson;

    // 根据Menu列表生成符合微信规范的创建菜单JSon
    //一级菜单不超过3个,二级菜单不超过5个
    //微信唯一标示
    //菜单列表,type为click时url留空,view时key留空
    public string CreateMenuJson(IListmunuList)
    {
        JsonData jd = new JsonData();
        jd["button"] = new JsonData();
        foreach (Menu menu in munuList)
        {
            if (menu.IsSub)
            {
                JsonData json = new JsonData();
                json["name"] = menu.name;
                json["sub_button"] = new JsonData();
                foreach (Menu item in menu.sub_button)
                {
                    JsonData tmpJson = new JsonData();
                    tmpJson["type"] = item.type;
                    tmpJson["name"] = item.name;
                    if (!string.IsNullOrEmpty(item.key))
                    {
                        tmpJson["key"] = item.key;
                    }
                    else
                    {
                        tmpJson["url"] = item.url;
                    }
                    json["sub_button"].Add(tmpJson);
                }
                jd["button"].Add(json);
            }
            else
            {
                JsonData tmpJson = new JsonData();
                tmpJson["type"] = menu.type;
                tmpJson["name"] = menu.name;
                if (!string.IsNullOrEmpty(menu.key))
                {
                    tmpJson["key"] = menu.key;
                }
                else
                {
                    tmpJson["url"] = menu.url;
                }
                jd["button"].Add(tmpJson);
            }
        }
        return jd.ToJson();
    }

    调用方法如下:

    IListlist = new List();
     
    Menu m1 = new Menu();
    m1.type = "click";
    m1.name = "今日歌曲";
    m1.key = "V1001_TODAY_MUSIC";
     
    Menu m2 = new Menu();
    m2.type = "click";
    m2.name = "歌手简介";
    m2.key = "V1001_TODAY_SINGER";
     
    list.Add(m1);
    list.Add(m2);
     
    Menu m3 = new Menu();
    m3.name = "菜单";
    m3.IsSub = true;
     
    Menu m4 = new Menu();
    m4.type = "view";
    m4.name = "搜索";
    m4.url = "http://www.soso.com/";
     
    Menu m5 = new Menu();
    m5.type = "view";
    m5.name = "视频";
    m5.url = "http://v.qq.com";
     
    Menu m6 = new Menu();
    m6.type = "click";
    m6.name = "赞我们一下";
    m6.key = "V1001_GOOD";
     
    m3.sub_button.Add(m4);
    m3.sub_button.Add(m5);
    m3.sub_button.Add(m6);
     
    string json = CreateMenuJson(list);

    正常情况下应该是从数据库读取,不用这样一个个的去实例化。这样就可以快速的得到自定义菜单的json数据。


    附:LitJson下载地址


  • 相关阅读:
    记一道乘法&加法线段树(模版题)
    2021CCPC网络赛(重赛)题解
    Codeforces Round #747 (Div. 2)题解
    F. Mattress Run 题解
    Codeforces Round #744 (Div. 3) G题题解
    AtCoder Beginner Contest 220部分题(G,H)题解
    Educational Codeforces Round 114 (Rated for Div. 2)题解
    Codeforces Global Round 16题解
    Educational Codeforces Round 113 (Rated for Div. 2)题解
    AtCoder Beginner Contest 182 F
  • 原文地址:https://www.cnblogs.com/mnight/p/3677672.html
Copyright © 2011-2022 走看看