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 ...
随机推荐
- FFTW3学习笔记1:VS2015下配置FFTW3(快速傅里叶变换)库
一.FFTW简介 FFTW ( the Faster Fourier Transform in the West) 是一个快速计算离散傅里叶变换的标准C语言程序集,其由MIT的M.Frigo 和S. ...
- java23种设计模式之一: 代理模式(动态代理)
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...
- Problem G: 切煎饼
Description 王小二自夸刀工不错,有人放一张大的圆煎饼在砧板上,问他:饼不允许离开砧板,切100刀最多能切多少块? Input 多组测试数据,每组输入1个整数,代表切的刀数 Output 每 ...
- SCOJ 4427: Miss Zhao's Graph dp
4427: Miss Zhao's Graph 题目连接: http://acm.scu.edu.cn/soj/problem.action?id=4427 Description Mr Jiang ...
- CentOS6永久修改主机名称
1.修改network vi /etc/sysconfig/network 修改HOSTNAME值 2.修改hosts vi /etc/hosts 修改中间的那个localhost 3.使用hostn ...
- unix-软件安装
检查软件是否已经安装 rpm -qa|grep 软件标识名 在线安装软件 yum -y install 软件标识名
- object-c的异常处理机制
转载请注明:http://blog.sina.com.cn/s/blog_69081e060100utl5.html 一直听说iOS有异常处理机制,却从来没有关系过,今天小生就来关心下iOS的异常 ...
- 源码管理--llorch的Visual Studio基本教程(四)
通用的演示样例说明: 本系列博客仅仅讨论工具的基础,不讨论不论什么语言. 甚至不讨论快捷键:-) 能够用鼠标就完毕本教程 IDE默认指代的是Visual Studio 2013 Community E ...
- jdk8十大特性并代码demo(转)
一.十大特性 1.Lambda表达式 2.Stream函数式操作流元素集合 3.接口新增:默认方法与静态方法 4.方法引用,与Lambda表达式联合使用 5.引入重复注解 6.类型注解 7.最新的Da ...
- ArcGIS Engine中空间参照(地理坐标)相关方法总结转
ArcGIS Engine中空间参照(地理坐标)相关方法总结 来自:http://blog.csdn.net/u011170962/article/details/38776101 1.创建空间参考 ...