这里使用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数据。