• 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下载地址


  • 相关阅读:
    linux设备和驱动加载的先后顺序
    CCT之CAMERA TUNNING调试学习总结
    MTK Android software Tools工具的说明
    Android开发概要记录
    报表软件公司高价悬赏BUG,100块1个我真是醉了
    OV5640全景模式预览倒180度,拍照正常的问题
    一起学Python:TCP简介
    udp绑定信息
    应用:udp聊天器
    socket简介
  • 原文地址:https://www.cnblogs.com/mnight/p/3677672.html
Copyright © 2020-2023  润新知