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


原文地址:https://www.cnblogs.com/mnight/p/3677672.html