asp.net 输出微信自定义菜单json
这里使用LitJson.dll作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数据。
asp.net 输出微信自定义菜单json的更多相关文章
- Magcodes.WeiChat——自定义CustomCreationConverter之实现微信自定义菜单的序列化
微信自定义菜单接口是一个比较麻烦的接口,往往开发的小伙伴们看到下面的这段返回JSON,整个人就会不好了: {"menu":{"button":[{" ...
- 微信自定义菜单说php json_encode不转义中文汉字的方法
http://blog.csdn.net/qmhball/article/details/45690017 最近在开发微信自定义菜单. 接口比较简单,就是按微信要求的格式post一段json数据过去就 ...
- java 微信自定义菜单 java微信接口开发 公众平台 SSM redis shiro 多数据源
A 调用摄像头拍照,自定义裁剪编辑头像,头像图片色度调节B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 ,0个代码不用写,生成 ...
- java SSM 框架 微信自定义菜单 快递接口 SpringMVC mybatis redis shiro ehcache websocket
A 调用摄像头拍照,自定义裁剪编辑头像,头像图片色度调节B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 ,0个代码不用写,生成 ...
- Magicodes.WeiChat——自定义knockoutjs template、component实现微信自定义菜单
本人一向比较喜欢折腾,玩了这么久的knockoutjs,总觉得不够劲,于是又开始准备折腾自己了. 最近在完善Magicodes.WeiChat微信开发框架时,发现之前做的自定义菜单这块太不给力了,而各 ...
- 微信自定义菜单url默认80端口问题解决
微信自定义菜单url默认80端口的,但是有些服务器上可能配置了多个tomcat.或者是刚好你服务器上80端口被占用了.在这样的情况下,我们可以通过如下方式解决: 首先安装apache,关于apache ...
- 我的第一个npm包:wechat-menu-editor 基于Vue的微信自定义菜单编辑器
wechat-menu-editor 微信自定义菜单编辑器 前言 在做微信公众号相关开发时,基本上会去开发的功能就是微信自定义菜单设置的功能,本着不重复造轮子的原则,于是基于Vue封装的一个微信自定义 ...
- C#/ASP.NET MVC微信公众号接口开发之从零开发(四) 微信自定义菜单(附源码)
C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...
- 微信自定义菜单errcode(40016)
最近在做微信开发,通过微信API创建自定义菜单时候出现:{"errcode":40016,"errmsg":"invalid button size ...
随机推荐
- Python 脚本编程及国际化
在前一篇博客文章 <使用 Python 编写脚本并发布> 中,我介绍了如何使用 Python 进行脚本编程,说实话这是我在尝试 Python 进行网站和网络编程之后首次使用 Python ...
- RxSwift 系列(一)
为什么使用RxSwift? 我们编写的代码绝大多数都涉及对外部事件的响应.当用户点击操作时,我们需要编写一个@IBAction事件来响应.我们需要观察通知,以检测键盘何时改变位置.当网络请求响应数据时 ...
- 让你的chrome开发工具console支持jquery
首先执行以下代码: ;(function(d,s){d.body.appendChild(s=d.createElement('script')).src='http://code.jquery.co ...
- bzoj 3595
Splay 每个节点维护一个区间. /************************************************************** Problem: 3595 User ...
- Uva1553 Caves and Tunnels LCT
简单题,主要为了练手. #include <cstdio> #include <iostream> #define maxn 100010 using namespace st ...
- bzoj4034 树上操作
Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中 ...
- [转]Android开发过程中遇到的问题
例1: ‘Can't bind to local 8700 for debugger’报错和解决 1.CTS测试出现,运行startcts后,‘Can't bind to local 8700 ...
- activemq 消息传送测试
activemq 5.10.0,topic messagelength字符 20000011 发送时间 接收时间 传送时间 毫秒 1 1443067284128 1443067288325 ...
- css选择器:first-child和nth-child 采坑记
今天想用nth-child来给一个类似于树的目录(bootstrap-nav-tree 一个angularjs插件)设置不同的颜色,结构大致类似于 <ul> <li class=& ...
- debian8上安装pyspider - pyspider中文文档 - pyspider中文网
debian8上安装pyspider - pyspider中文文档 - pyspider中文网 #apt-get install python python-dev python-distribu ...