namespace BamnWeiXin
{
public class MenuGetResultInfo
{
public Menu menu { get; set; }
}
public class Menu
{
public List<Button> button { get; set; }
}
public class Button
{
public string type { get; set; }
public string name { get; set; }
public string key { get; set; }
public string url { get; set; }
public List<Button> sub_button { get; set; }
}
}
Code language: JavaScript (javascript)
核心代码
// 将微信接口返回的JSON字符串反序列化成菜单实体对象
MenuGetResultInfo menuInfo = Tool.DeserializeJson<MenuGetResultInfo>(json);
Code language: HTML, XML (xml)
- 场景:调用微信公众号【获取自定义菜单】接口,微信返回一段JSON字符串,我们需要把JSON转为C#实体对象(反序列化),方便代码读取菜单数据。
- 实体结构对应微信返回JSON结构
- 最外层:
MenuGetResultInfo→ 包含menu Menu类:包含一级菜单数组buttonButton类:单个菜单,支持二级子菜单sub_buttontype:菜单类型(click、view等)name:菜单显示文字key:点击事件关键字(click类型菜单)url:网页跳转链接(view类型菜单)sub_button:二级子菜单列表
- 最外层:
- 调试监视窗口:
menuInfo.menu.button.Count=2:代表2个一级菜单- 其中一个一级菜单的
sub_button.Count=3:代表这个菜单下面有3个二级子菜单 - 没有子菜单的按钮,
sub_button为null
注意点
属性名必须和微信返回JSON字段名完全一致(大小写!
sub_button不能写成subButton,除非加JsonProperty别名),否则反序列化无法赋值。