好了,还有另外一个问题,子菜单也就是属性sub_button是可有可无的东西,有的话,需要指定Name属性,并添加它的sub_button集合对象就可以了,那么我们在增加一个构造子菜单的对象信息的构造函数。
///
/// 参数化构造函数,用于构造子菜单
///
/// 按钮名称
/// 子菜单集合
public MenuInfo(string name, IEnumerable sub_button)
{
this.name = name;
this.sub_button = new List();
this.sub_button.AddRange(sub_button);
}
由于只指定Name和sub_button的属性内容,其他内容为null的话,自然构造出来的Json就没有包含它们,非常完美!
为了获取菜单的信息,我们还需要定义两个实体对象,如下所示。
///
/// 菜单的Json字符串对象
///
public class MenuJson
{
public List button { get; set; }
public MenuJson()
{
button = new List();
}
}
///
/// 菜单列表的Json对象
///
public class MenuListJson
{
public MenuJson menu { get; set; }
}
3、菜单管理操作的接口实现
我们从微信的定义里面,可以看到,我们通过API可以获取菜单信息、创建菜单、删除菜单,那么我们来定义它们的接口如下。
///
/// 菜单的相关操作
///
public interface IMenuApi
{
///
/// 获取菜单数据
///
/// 调用接口凭证
///
MenuJson GetMenu(string accessToken);
///
/// 创建菜单
///
/// 调用接口凭证
/// 菜单对象
///
CommonResult CreateMenu(string accessToken, MenuJson menuJson);
///
/// 删除菜单
///
/// 调用接口凭证
///
CommonResult DeleteMenu(string accessToken);
}
具体的获取菜单信息的实现如下。
///
/// 获取菜单数据
///
/// 调用接口凭证
///
public MenuJson GetMenu(string accessToken)
{
MenuJson menu = null;
var url = string.Format("https://api.weixin.qq.com/cgi-bin/menu/get?access_token={0}", accessToken);
MenuListJson list = JsonHelper.ConvertJson(url);
if (list != null)
{
menu = list.menu;
}
return menu;
}
这里就是把返回的Json数据,统一转换为我们需要的实体信息了,一步到位。
调用代码如下所示。
private void btnGetMenuJson_Click(object sender, EventArgs e)
{
IMenuApi menuBLL = new MenuApi();
MenuJson menu = menuBLL.GetMenu(token);
if (menu != null)
{
Console.WriteLine(menu.ToJson());
}
}
创建和删除菜单对象的操作实现如下所示。
///
/// 创建菜单
///
/// 调用接口凭证
/// 菜单对象
///
public CommonResult CreateMenu(string accessToken, MenuJson menuJson)
{
var url = string.Format("https://api.weixin.qq.com/cgi-bin/menu/create?access_token={0}", accessToken);
string postData = menuJson.ToJson();
return Helper.GetExecuteResult(url, postData);
}