asp.net 输出微信自定义菜单json

时间:2024-09-07 15:04:50

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

asp.net 输出微信自定义菜单json

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

 {
"button":[
{
"type":"click",
"name":"今日歌曲",
"key":"V1001_TODAY_MUSIC"
},
{
"type":"click",
"name":"歌手简介",
"key":"V1001_TODAY_SINGER"
},
{
"name":"菜单",
"sub_button":[
{
"type":"view",
"name":"搜索",
"url":"http://www.soso.com/
"
},
{
"type":"view",
"name":"视频",
"url":"http://v.qq.com/
"
},
{
"type":"click",
"name":"赞一下我们",
"key":"V1001_GOOD"
}]
}]
}

首先定义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下载地址